----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/37066/ -----------------------------------------------------------
Review request for geode and vivek bhaskar. Repository: geode Description ------- In the context of distributed transactions, DistributedPutAllOperation.createPRMessages calls putAllData[i].setFakeEventID() to set event ID for each entry in put all op (called from DistTXStateProxyImplOnCoordinator.postPutAll->DistPeerTXStateStub.postPutAll->TXStateStub.postPutAll -> PartitionedTXRegionStub.postPutAll). However when the data node itself is a transaction coordinator, createPRMessages is not called and the data is locally put by calling DistTXStateProxyImplOnCoordinator.postPutAll->DistTXStateOnCoordinator.postPutAll(). This call sequence does not call putAllData[i].setFakeEventID(). At the commit time when the coordinator sends TX events to secondaries, some of the events from different buckets had same event ID. This caused TXState.txPutEntry() to skip those events (assuming that the entry has been processed already) and therefore the test failed. The fix is to call putallOp.putAllData[i].setFakeEventID() in DistTXStateProxyImplOnCoordinator.postPutAll so that eventID is set for all entries. Similar fix is done for remove all. Also enabled the assertion that was surrounded by logger.isDebugEnabled() call due to this issue Fix is specific to Distributed TX (feature under development). Diffs ----- gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/DistTXStateProxyImplOnCoordinator.java 2f79605 gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/TXRegionState.java 67cb8c5 Diff: https://reviews.apache.org/r/37066/diff/ Testing ------- ./gradlew gemfire-core:integrationTest -DintegrationTest.single=*DistTX*JUnit* ./gradlew -DdistributedTest.single=DistTXDistributedTestSuite gemfire-core:distributedTest 100 runs DistributedTransactionDUnitTest successful Thanks, Shirish Deshmukh