]
RH Bugzilla Integration commented on ISPN-5462:
-----------------------------------------------
Matej Čimbora <mcimbora(a)redhat.com> changed the Status of [bug
Transaction prepare is not replicated to new owners during state
transfer
-------------------------------------------------------------------------
Key: ISPN-5462
URL:
https://issues.jboss.org/browse/ISPN-5462
Project: Infinispan
Issue Type: Bug
Components: Core
Affects Versions: 7.2.1.Final
Reporter: Dan Berindei
Assignee: Dan Berindei
Priority: Critical
Labels: testsuite_stability
Fix For: 7.2.2.Final, 8.0.0.Alpha1
This is related to ISPN-5460, and I've seen it in the same map/reduce tests.
{{TransactionTable}} updates its topology id *before* the new topology is installed in
{{StateConsumerImpl}}. This means a transaction could be created with the new topology id,
while the prepare is replicated to the owners in the old topology - meaning the new owners
never receive the prepare and the commit then fails.
Note: without the ISPN-4546 fix, it would have reported success, but it wouldn't have
updated the keys.
{noformat}
09:25:57,749 TRACE (asyncTransportThread-0,NodeA:) [StateConsumerImpl] Received new
topology for cache resultCache2, isRebalance = true, isMember = true, topology =
CacheTopology{id=1, rebalanceId=1, currentCH=ReplicatedConsistentHash{ns = 1, owners =
(1)[NodeA-6285: 1]}, pendingCH=ReplicatedConsistentHash{ns = 1, owners = (2)[NodeA-6285:
1, NodeB-17038: 0]}, unionCH=ReplicatedConsistentHash{ns = 1, owners = (2)[NodeA-6285: 1,
NodeB-17038: 0]}, actualMembers=[NodeA-6285, NodeB-17038]}
09:25:57,749 TRACE (asyncTransportThread-1,NodeA:) [TransactionTable] Created a new local
transaction: LocalXaTransaction{xid=null} LocalTransaction{remoteLockedNodes=null,
isMarkedForRollback=false, lockedKeys=null, backupKeyLocks=null, topologyId=1,
stateTransferFlag=null} org.infinispan.transaction.xa.LocalXaTransaction@3c96
09:25:57,749 TRACE (asyncTransportThread-1,NodeA:) [TransactionXaAdapter] end called on
tx GlobalTransaction:<NodeA-6285>:15510:local(resultCache2)
09:25:57,749 TRACE (asyncTransportThread-1,NodeA:) [StateTransferInterceptor]
handleTxCommand for command PrepareCommand {modifications=[PutKeyValueCommand{key=Boston,
value=1, flags=null, putIfAbsent=false, valueMatcher=MATCH_ALWAYS,
metadata=EmbeddedMetadata{version=null}, successful=true}], onePhaseCommit=false,
gtx=GlobalTransaction:<NodeA-6285>:15510:local, cacheName='resultCache2',
topologyId=-1}, origin null
09:25:57,749 TRACE (asyncTransportThread-1,NodeA:) [JGroupsTransport] dests=[NodeA-6285],
command=PrepareCommand {modifications=[PutKeyValueCommand{key=Boston, value=1, flags=null,
putIfAbsent=false, valueMatcher=MATCH_ALWAYS, metadata=EmbeddedMetadata{version=null},
successful=true}], onePhaseCommit=false,
gtx=GlobalTransaction:<NodeA-6285>:15510:local, cacheName='resultCache2',
topologyId=0}, mode=SYNCHRONOUS_IGNORE_LEAVERS, timeout=15000
09:25:57,749 TRACE (asyncTransportThread-1,NodeA:) [LocalTransaction] Adding remote locks
on [NodeA-6285]. Remote locks are null
09:25:57,749 TRACE (asyncTransportThread-1,NodeA:) [TransactionCoordinator] Committing
transaction GlobalTransaction:<NodeA-6285>:15510:local
09:25:57,749 TRACE (asyncTransportThread-0,NodeA:) [StateConsumerImpl] Lock State
Transfer in Progress for topology ID 1
// StateConsumerImpl's topology is updated here
09:25:57,749 TRACE (asyncTransportThread-0,NodeA:) [StateConsumerImpl] Start keeping
track of keys for rebalance
09:25:57,751 TRACE (remote-thread-5,NodeB:) [StateTransferManagerImpl] Installing new
cache topology CacheTopology{id=1, rebalanceId=1, currentCH=ReplicatedConsistentHash{ns =
1, owners = (1)[NodeA-6285: 1]}, pendingCH=ReplicatedConsistentHash{ns = 1, owners =
(2)[NodeA-6285: 1, NodeB-17038: 0]}, unionCH=ReplicatedConsistentHash{ns = 1, owners =
(2)[NodeA-6285: 1, NodeB-17038: 0]}, actualMembers=[NodeA-6285, NodeB-17038]} on cache
resultCache2
09:25:57,752 TRACE (remote-thread-5,NodeB:) [StateConsumerImpl] Requesting transactions
for segments [0] of cache resultCache2 from node NodeA-6285
09:25:57,752 TRACE (remote-thread-2,NodeA:) [StateProviderImpl] Skipping transaction
LocalXaTransaction{xid=< formatId=131077, gtrid_length=29, bqual_length=36,
tx_uid=0:ffffc0a80a66:ab12:55504ae3:5806, node_name=1,
branch_uid=0:ffffc0a80a66:ab12:55504ae3:5807, subordinatenodename=null, eis_name=0 >}
LocalTransaction{remoteLockedNodes=[NodeA-6285], isMarkedForRollback=false,
lockedKeys=[Boston], backupKeyLocks=null, topologyId=1, stateTransferFlag=null}
org.infinispan.transaction.xa.LocalXaTransaction@3c96 as it was started in the current
topology or by a leaver
09:25:57,753 TRACE (remote-thread-3,NodeB:) [InboundInvocationHandlerImpl] Calling
perform() on CommitCommand {gtx=GlobalTransaction:<NodeA-6285>:15510:remote,
cacheName='resultCache2', topologyId=1}
09:25:57,753 TRACE (remote-thread-3,NodeB:) [AbstractTransactionBoundaryCommand] Did not
find a RemoteTransaction for GlobalTransaction:<NodeA-6285>:15510:remote, completed
successfully? false
09:25:57,758 ERROR (remote-thread-3,NodeB:) [InboundInvocationHandlerImpl] ISPN000260:
Exception executing command
java.lang.IllegalStateException: Remote transaction not found
{noformat}