我有一个概念性的问题。我正在向Composer REST执行异步请求,并且我收到了消息:'error trying invoke chaincode. Error: Peer has rejected transaction \'552b42fa4d2cfd366ff1b7d01371878f53f7553b44f141187c6db86b75f68906\' with cdoe MVCC_READ_CONFLICT',
。使用node-sdk时遇到了同样的问题。这是什么原因?难道不能异步提交多个交易吗?
答案 0 :(得分:7)
Hyperledger Fabric使用无锁的乐观并发,在脏读/写的情况下使用回滚。您需要尽可能避免密钥冲突,并且可能需要在客户端编写重试逻辑。
Fabric的BatchTimeout设置可用于减少延迟(最小化冲突的可能性),但却牺牲了整个过程:
https://github.com/hyperledger/fabric/blob/release/sampleconfig/configtx.yaml#L144
答案 1 :(得分:3)
提交事务时,对等体会生成读写集。然后在将事务提交到分类帐时使用此读/写集。它包含要读取/写入的变量的名称以及读取时的版本。如果在集创建和提交之间的时间内,提交了另一个事务并更改了变量的版本,则在提交期间将拒绝原始事务,因为读取时的版本不是当前版本。
要解决此问题,您必须创建数据和事务结构,以避免同时编辑相同的密钥。这里的结构样本提供了一种示例方法:
https://github.com/hyperledger/fabric-samples/tree/release/high-throughput