[
https://issues.apache.org/jira/browse/GEODE-5277?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
nabarun updated GEODE-5277:
---------------------------
Fix Version/s: (was: 1.8.0)
1.7.0
> Server affinity causes wrong transaction failover behavior
> ----------------------------------------------------------
>
> Key: GEODE-5277
> URL: https://issues.apache.org/jira/browse/GEODE-5277
> Project: Geode
> Issue Type: Bug
> Components: transactions
> Reporter: Jianxia Chen
> Assignee: Jianxia Chen
> Priority: Major
> Labels: pull-request-available
> Fix For: 1.7.0
>
> Time Spent: 10m
> Remaining Estimate: 0h
>
> A transaction is initiated from a client, and is successfully committed on
> the server. Client has received TXCommitMessage from the server. It has a
> listener callbacks need pdx Type from the server, so it sends a
> GetPDXEnumByIdOp message to the server. The connection to the server is lost,
> so it failed over to a new server. Because it is still using affinity server,
> so it sends TXFailoverOp trying to locate the transaction hosts. However,
> GetPDXEnumByIdOp message does not set transaction id as it does not
> participate in a transaction. This cause server failed with the assertion and
> send back the InternalGemFireError to the client.
> This could be solved by unset the serverAffinity ThreadLocal after client
> receives the TXCommitMessage but before callbacks are invoked.
>
> {code}
> at
> org.apache.geode.cache.client.internal.AbstractOp.processAck(AbstractOp.java:263)
> at
> org.apache.geode.cache.client.internal.TXFailoverOp$TXFailoverOpImpl.processResponse(TXFailoverOp.java:52)
> at
> org.apache.geode.cache.client.internal.AbstractOp.processResponse(AbstractOp.java:226)
> at
> org.apache.geode.cache.client.internal.AbstractOp.attemptReadResponse(AbstractOp.java:211)
> at
> org.apache.geode.cache.client.internal.AbstractOp.attempt(AbstractOp.java:387)
> at
> org.apache.geode.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:276)
> at
> org.apache.geode.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:327)
> at
> org.apache.geode.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:885)
> at
> org.apache.geode.cache.client.internal.OpExecutorImpl.executeOnServer(OpExecutorImpl.java:378)
> at
> org.apache.geode.cache.client.internal.OpExecutorImpl.executeWithServerAffinity(OpExecutorImpl.java:231)
> at
> org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:140)
> at
> org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:127)
> at
> org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:782) at
> org.apache.geode.cache.client.internal.TXFailoverOp.execute(TXFailoverOp.java:29)
> at
> org.apache.geode.cache.client.internal.OpExecutorImpl.executeWithServerAffinity(OpExecutorImpl.java:265)
> at
> org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:140)
> at
> org.apache.geode.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:127)
> at
> org.apache.geode.cache.client.internal.PoolImpl.execute(PoolImpl.java:782) at
> org.apache.geode.cache.client.internal.GetPDXEnumByIdOp.execute(GetPDXEnumByIdOp.java:34)
> at
> org.apache.geode.pdx.internal.ClientTypeRegistration.getEnumById(ClientTypeRegistration.java:198)
> at
> org.apache.geode.pdx.internal.TypeRegistry.getEnumInfoById(TypeRegistry.java:442)
> at
> org.apache.geode.pdx.internal.TypeRegistry.getEnumById(TypeRegistry.java:418)
> at
> org.apache.geode.internal.InternalDataSerializer.readPdxEnum(InternalDataSerializer.java:2323)
> at
> org.apache.geode.internal.InternalDataSerializer.basicReadObject(InternalDataSerializer.java:3075)
> at org.apache.geode.DataSerializer.readObject(DataSerializer.java:2978) at
> org.apache.geode.pdx.internal.PdxInputStream.readObject(PdxInputStream.java:251)
> at
> org.apache.geode.pdx.internal.PdxInputStream.readObject(PdxInputStream.java:96)
> at
> org.apache.geode.pdx.internal.PdxReaderImpl.readObject(PdxReaderImpl.java:333)
> at
> org.apache.geode.pdx.internal.PdxInstanceImpl.readObject(PdxInstanceImpl.java:527)
> at
> org.apache.geode.pdx.internal.PdxReaderImpl.readObject(PdxReaderImpl.java:326)
> at
> org.apache.geode.pdx.internal.PdxInstanceImpl.readObject(PdxInstanceImpl.java:522)
> at util.VersionedValueHolder.myFromData(VersionedValueHolder.java:242) at
> util.PdxVersionedValueHolder.fromData(PdxVersionedValueHolder.java:95) at
> org.apache.geode.pdx.internal.PdxReaderImpl.basicGetObject(PdxReaderImpl.java:737)
> at
> org.apache.geode.pdx.internal.PdxInstanceImpl.basicGetObject(PdxInstanceImpl.java:600)
> at
> org.apache.geode.pdx.internal.PdxInstanceImpl.getObject(PdxInstanceImpl.java:243)
> at pdx.PdxTest.getOldValueStr(PdxTest.java:518) at
> pdx.PdxSilenceListener.getOldValueStr(PdxSilenceListener.java:31) at
> util.AbstractListener.toString(AbstractListener.java:191) at
> util.AbstractListener.logCall(AbstractListener.java:356) at
> util.SilenceListener.afterDestroy(SilenceListener.java:31) at
> org.apache.geode.internal.cache.EnumListenerEvent$AFTER_DESTROY.dispatchEvent(EnumListenerEvent.java:151)
> at
> org.apache.geode.internal.cache.LocalRegion.dispatchEvent(LocalRegion.java:8468)
> at
> org.apache.geode.internal.cache.LocalRegion.dispatchListenerEvent(LocalRegion.java:6969)
> at
> org.apache.geode.internal.cache.LocalRegion.invokeTXCallbacks(LocalRegion.java:6807)
> at
> org.apache.geode.internal.cache.TXCommitMessage.firePendingCallbacks(TXCommitMessage.java:727)
> at
> org.apache.geode.internal.cache.TXCommitMessage.basicProcessOps(TXCommitMessage.java:718)
> at
> org.apache.geode.internal.cache.TXCommitMessage.basicProcess(TXCommitMessage.java:638)
> at
> org.apache.geode.internal.cache.tx.ClientTXStateStub.afterServerCommit(ClientTXStateStub.java:184)
> at
> org.apache.geode.internal.cache.tx.ClientTXStateStub.commit(ClientTXStateStub.java:112)
> at
> org.apache.geode.internal.cache.TXStateProxyImpl.commit(TXStateProxyImpl.java:228)
> at
> org.apache.geode.internal.cache.TXManagerImpl.commit(TXManagerImpl.java:405)
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)