You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Anthony Baker (JIRA)" <ji...@apache.org> on 2018/06/08 16:02:00 UTC
[jira] [Resolved] (GEODE-5277) Server affinity causes wrong
transaction failover behavior
[ https://issues.apache.org/jira/browse/GEODE-5277?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Anthony Baker resolved GEODE-5277.
----------------------------------
Resolution: Fixed
> 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.8.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)