]
Galder Zamarreño updated ISPN-4239:
-----------------------------------
Status: Resolved (was: Pull Request Sent)
Fix Version/s: 7.0.0.Final
Resolution: Done
Commands received before the first topology where the local node is a
member are not ignored
--------------------------------------------------------------------------------------------
Key: ISPN-4239
URL:
https://issues.jboss.org/browse/ISPN-4239
Project: Infinispan
Issue Type: Bug
Components: Core, State Transfer
Affects Versions: 6.0.2.Final, 7.0.0.Alpha3
Reporter: Dan Berindei
Assignee: Dan Berindei
Labels: testsuite_stability
Fix For: 7.0.0.Alpha4, 7.0.0.Final
The ISPN-3731 fix was supposed to prevent a joiner from running commands broadcasted by
other members before the joiner became a member in the cache topology.
However, the fix was incomplete, and commands received before the joiner became a member
were still executed. This is causing failures in {{StateTransferReplicationQueueTest}},
which is issuing a put(k, v) and a remove(k) and expecting the key to be removed. It can
happen that the put(k, v) command is executed before the joiner becomes a member, but the
remove(k) command is rejected because it came from a topology where the joiner was not a
member:
{noformat}
12:54:41,412 TRACE (testng-StateTransferReplicationQueueTest:nbst-replqueue)
[StateTransferManagerImpl] Installing new cache topology CacheTopology{id=3,
currentCH=ReplicatedConsistentHash{members=[StateTransferReplicationQueueTest-NodeA-8686],
numSegments=1, primaryOwners=[0]}, pendingCH=null} on cache nbst-replqueue
12:54:41,412 TRACE (testng-StateTransferReplicationQueueTest:nbst-replqueue)
[StateTransferLockImpl] Signalling topology 3 is installed
12:54:41,433 TRACE (Incoming-1,StateTransferReplicationQueueTest-NodeC-12962:)
[InboundInvocationHandlerImpl] Calling perform() on MultipleRpcCommand{commands=[...,
PrepareCommand {modifications=[PutKeyValueCommand{key=test58,
value=org.infinispan.statetransfer.StateTransferReplicationQueueTest$PojoValue@59,
flags=null, putIfAbsent=false, valueMatcher=MATCH_ALWAYS,
metadata=EmbeddedMetadata{version=null}, successful=true}], onePhaseCommit=true,
gtx=GlobalTransaction:<StateTransferReplicationQueueTest-NodeA-8686>:6969:local,
cacheName='nbst-replqueue', topologyId=3}], cacheName='nbst-replqueue'}
12:54:41,439 TRACE
(remote-thread-StateTransferReplicationQueueTest-NodeC-p3980-t1:nbst-replqueue)
[StateTransferManagerImpl] Installing new cache topology CacheTopology{id=4,
currentCH=ReplicatedConsistentHash{members=[StateTransferReplicationQueueTest-NodeA-8686],
numSegments=1, primaryOwners=[0]},
pendingCH=ReplicatedConsistentHash{members=[StateTransferReplicationQueueTest-NodeA-8686,
StateTransferReplicationQueueTest-NodeC-12962], numSegments=1, primaryOwners=[0]}} on
cache nbst-replqueue
12:54:41,439 TRACE
(remote-thread-StateTransferReplicationQueueTest-NodeC-p3980-t1:nbst-replqueue)
[StateTransferManagerImpl] This is the first topology in which the local node is a member
12:54:41,462 TRACE
(Incoming-1,StateTransferReplicationQueueTest-NodeC-12962:nbst-replqueue)
[ReadCommittedEntry] Updating entry (key=test58 removed=false valid=true changed=true
created=true loaded=false
value=org.infinispan.statetransfer.StateTransferReplicationQueueTest$PojoValue@59
metadata=EmbeddedMetadata{version=null}, providedMetadata=null)
12:54:41,491 TRACE (Incoming-1,StateTransferReplicationQueueTest-NodeC-12962:)
[CommandAwareRpcDispatcher] Attempting to execute command:
MultipleRpcCommand{commands=[PrepareCommand {modifications=[RemoveCommand{key=test58,
value=null, flags=null, valueMatcher=MATCH_ALWAYS}], onePhaseCommit=true,
gtx=GlobalTransaction:<StateTransferReplicationQueueTest-NodeA-8686>:6970:local,
cacheName='nbst-replqueue', topologyId=3}, ...],
cacheName='nbst-replqueue'} [sender=StateTransferReplicationQueueTest-NodeA-8686]
12:54:41,493 TRACE (Incoming-1,StateTransferReplicationQueueTest-NodeC-12962:)
[StateTransferLockImpl] Waiting for transaction data for topology 3, current topology is
3
12:54:41,493 TRACE (Incoming-1,StateTransferReplicationQueueTest-NodeC-12962:)
[InboundInvocationHandlerImpl] Ignoring command sent before the local node was a member
(command topology id is 3)
{noformat}