Hyperledger fabric 什么情况会导致结构网络进入状态分叉

Hyperledger fabric 什么情况会导致结构网络进入状态分叉,hyperledger-fabric,Hyperledger Fabric,我有一个问题,在什么情况下,它会导致结构网络进入状态分叉? 我见过州政府,你看,还有,但我不太确定原因。脱机对等机在启动时将从订单和其他对等机接收txs和块。如果工作正常,结构不应经历状态分叉。看到MVCC_读取_冲突或链码更新失败通常并不表示状态分叉。检查状态分叉的最简单方法是比较提交散列。在日志中查找以下格式的消息: [%s]提交的块[%d],其中%d个事务处于%dms状态\u验证=%dms块\u和\u pvtdata\u提交=%dms状态\u提交=%dms提交=[%x] 对于同一通道上的同

我有一个问题,在什么情况下,它会导致结构网络进入状态分叉?
我见过州政府,你看,还有,但我不太确定原因。脱机对等机在启动时将从订单和其他对等机接收txs和块。

如果工作正常,结构不应经历状态分叉。看到MVCC_读取_冲突或链码更新失败通常并不表示状态分叉。检查状态分叉的最简单方法是比较提交散列。在日志中查找以下格式的消息:

[%s]提交的块[%d],其中%d个事务处于%dms状态\u验证=%dms块\u和\u pvtdata\u提交=%dms状态\u提交=%dms提交=[%x]

对于同一通道上的同一块,在您的同龄人之间进行比较。如果值相同,则没有状态叉;如果值不同,则可能需要参考问题中链接的“重置”文档

要直接回答您的问题,Fabric如何生成状态分叉

在某些错误情况下,couchDB Fabric可能会不适当地将事务标记为无效,而实际上它是一个DB读取错误。此错误已自修复

或者,statedb可能由于外部原因而损坏,例如,无法正确地fsync,例如启用couchdb的功能


如果您正在运行Fabric的最新版本,并且能够复制任何类型的状态分叉场景,那么开发人员将非常乐意收到错误报告,以便解决问题。

非常感谢您的详细回答。是的,我在v1.1.0中遇到了bug中的state分叉,statedb也损坏了。顺便说一句,一个被对等方标记为无效的事务状态将被同步到其他对等方,并在这些对等方中标记为无效?@Jason Yellicki如果一个对等方被分叉,是否可以使用该对等方的早期备份版本,某种程度上类似于rollback cmd,是否打算从order接收新txs和块?@Jason YellickAnd statedb可能已损坏,例如,系统OOM,如何在新版本结构中消除此影响?系统OOM不应导致状态分叉。Fabric执行安全提交,即,将提交意图写入持久性存储,执行提交,记录提交发生在持久性存储上,这样,如果进程在任何时候由于任何原因崩溃,它仍然能够在正确的点恢复和恢复提交。这是数据库(包括couchdb和leveldb)中的标准技术,因此OOM或其他崩溃不应产生状态分叉。同样,如果您可以通过崩溃生成状态分叉,请报告,这是一个bug,应该修复。谢谢,但是v1.1.2标记已被删除,那么我如何检查提交并了解如何修复bug。@Jason Yellick