同时提交多个事务时的MVCC_READ_CONFLICT

Dan*_*man 3 hyperledger-fabric hyperledger-composer

我有一个概念性的问题.我正在向Composer REST执行异步请求,我收到消息:'error trying invoke chaincode. Error: Peer has rejected transaction \'552b42fa4d2cfd366ff1b7d01371878f53f7553b44f141187c6db86b75f68906\' with cdoe MVCC_READ_CONFLICT',.使用node-sdk时遇到了同样的问题.这是什么原因?是不是可以异步提交多个事务?

Dan*_*man 7

Hyperledger Fabric使用无锁的乐观并发,并在脏读/写时进行回滚.您需要尽可能避免密钥冲突,并且可能需要在客户端编写重试逻辑.

Fabric的BatchTimeout设置可用于减少延迟(最小化冲突的可能性),但代价是:

https://github.com/hyperledger/fabric/blob/release/sampleconfig/configtx.yaml#L144

  • 我今天刚刚在尝试通过 Composer REST API 与同一参与者进行多项交易时遇到此错误。有没有办法避免这种情况?或者我们是否只需要让我们所有的调用同步.. (2认同)

小智 5

提交事务时,对等方会生成一个读写集。然后,在将事务提交到分类账时使用此读/写集。它包含要读取/写入的变量的名称以及读取它们时的版本。如果在集创建和提交之间的时间内,提交了另一个事务并更改了变量的版本,则在提交期间将拒绝原始事务,因为读取时的版本不是当前版本。

为了解决这个问题,您将必须创建避免同时编辑同一密钥的数据和事务结构。此处的fabric-samples中提供了执行此操作的示例方法:

https://github.com/hyperledger/fabric-samples/tree/release/high-throughput

  • 我已经尝试了上面链接中的链码,但没有成功。我仍然收到 MVCC_READ_CONFLICT 错误。知道是什么原因造成的吗?我的交易速率仅为 3 Tx/s。有2位同行认可。 (2认同)