Reputation: 28
System: Hyperledger Fabric 1.4.6
Topology: 2 organizations (Org1, Org2) with 2 peers (peer1, peer2) each and Raft ordering service
Endorsement Policy: Any 2 peers
Chaincode interaction method: through Node.js SDK
StateDB: CouchDB
Detailed Steps to re-create the problem:
stub.putState()
stub.getState()
and 3 peers return same correct result and only peer2 of Org2 returns empty result as expectedstub.getHistoryForKey()
and all return the same results as expected (To my understanding, this method performs query directly from levelDB instead of CouchDB)stub.putState()
No such Data
as expected. Since it only requires 2 endorsement signatures, it is expected to pass through the validation.MVCC_READ_CONFLICT
stub.getState()
and only peer2 of Org2 return empty result as expectedstub.getHistoryForKey()
and 3 peers return the same results of 2 versions of record#ABC while peer2 of Org2 returns only original version of record#ABC without the latest versionHere comes to my questions:
Upvotes: 0
Views: 80
Reputation: 12053
Persisting / committing blocks is independent of validating transactions and updating the state. As long as the block is the correct sequence and signed by the correct orderer(s), it will be committed. Fabric than annotates each transaction in the block with metadata indicating the validity of each transaction.
As both Org1 and Org2 have peers which successfully endorse the transaction, the transaction is valid for peers which have not been tampered with. If there were not enough peers available to endorse the transaction, it would be considered invalid by all peers. There is no need to halt the system as transactions are being properly handled with the context of the network trust parameters.
Upvotes: 1