You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Sergey Shcherbakov (JIRA)" <ji...@apache.org> on 2015/11/09 22:03:11 UTC
[jira] [Created] (GEODE-537) NPE in JTA AFTER_COMPLETION command
processing
Sergey Shcherbakov created GEODE-537:
----------------------------------------
Summary: NPE in JTA AFTER_COMPLETION command processing
Key: GEODE-537
URL: https://issues.apache.org/jira/browse/GEODE-537
Project: Geode
Issue Type: Bug
Components: core
Reporter: Sergey Shcherbakov
A NullPinterException is being thrown on the server side and propagated to the Gemfire client in case when a running JTA transaction being rolled back:
{code}
2015-10-30 11:39:09.614 WARN 4623 --- [rTaskExecutor-1] com.atomikos.icatch.imp.CoordinatorImp : Unexpected error in afterCompletion
java.lang.NullPointerException: null
at com.gemstone.gemfire.internal.cache.tier.sockets.command.CommitCommand.writeCommitResponse(CommitCommand.java:122) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.internal.cache.tier.sockets.command.TXSynchronizationCommand$2.run(TXSynchronizationCommand.java:152) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.internal.cache.tier.sockets.command.TXSynchronizationCommand.cmdExecute(TXSynchronizationCommand.java:196) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:191) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:796) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection.doOneMessage(ServerConnection.java:923) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1168) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_05]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_05]
at com.gemstone.gemfire.internal.cache.tier.sockets.AcceptorImpl$1$1.run(AcceptorImpl.java:563) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
... 1 common frames omitted
Wrapped by: com.gemstone.gemfire.cache.client.ServerOperationException: remote server on crake(4623:loner):56169:166154b8: While performing a remote AFTER_COMPLETION
at com.gemstone.gemfire.cache.client.internal.AbstractOp.processObjResponse(AbstractOp.java:293) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.TXSynchronizationOp$Impl.processResponse(TXSynchronizationOp.java:119) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.AbstractOp.processResponse(AbstractOp.java:224) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.AbstractOp.attemptReadResponse(AbstractOp.java:175) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.AbstractOp.attempt(AbstractOp.java:378) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.ConnectionImpl.execute(ConnectionImpl.java:273) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.pooling.PooledConnection.execute(PooledConnection.java:329) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.executeWithPossibleReAuthentication(OpExecutorImpl.java:939) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.executeOnServer(OpExecutorImpl.java:379) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.executeWithServerAffinity(OpExecutorImpl.java:229) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:135) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.OpExecutorImpl.execute(OpExecutorImpl.java:122) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.PoolImpl.execute(PoolImpl.java:712) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.TXSynchronizationOp.execute(TXSynchronizationOp.java:52) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.cache.client.internal.ServerRegionProxy.afterCompletion(ServerRegionProxy.java:860) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.internal.cache.tx.ClientTXStateStub.afterCompletion(ClientTXStateStub.java:213) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.gemstone.gemfire.internal.cache.TXStateProxyImpl.afterCompletion(TXStateProxyImpl.java:539) ~[gemfire-core-1.0.0-incubating-SNAPSHOT.jar:na]
at com.atomikos.icatch.jta.Sync2Sync.afterCompletion(Sync2Sync.java:73) ~[transactions-jta-3.9.3.jar:na]
at com.atomikos.icatch.imp.CoordinatorImp.notifySynchronizationsAfterCompletion(CoordinatorImp.java:547) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.imp.CoordinatorStateHandler.rollbackWithAfterCompletionNotification(CoordinatorStateHandler.java:833) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.imp.ActiveStateHandler.rollbackWithAfterCompletionNotification(ActiveStateHandler.java:49) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.imp.ActiveStateHandler.rollback(ActiveStateHandler.java:314) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.imp.CoordinatorImp.rollback(CoordinatorImp.java:741) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.imp.TransactionStateHandler.rollback(TransactionStateHandler.java:185) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.imp.TransactionStateHandler.rollbackWithStateCheck(TransactionStateHandler.java:203) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.imp.CompositeTransactionImp.doRollback(CompositeTransactionImp.java:237) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.imp.CompositeTerminatorImp.rollback(CompositeTerminatorImp.java:123) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.imp.CompositeTransactionImp.rollback(CompositeTransactionImp.java:346) [transactions-3.9.3.jar:na]
at com.atomikos.icatch.jta.TransactionImp.rollback(TransactionImp.java:217) [transactions-jta-3.9.3.jar:na]
at com.atomikos.icatch.jta.TransactionManagerImp.rollback(TransactionManagerImp.java:448) [transactions-jta-3.9.3.jar:na]
at com.atomikos.icatch.jta.UserTransactionManager.rollback(UserTransactionManager.java:217) [transactions-jta-3.9.3.jar:na]
at org.springframework.transaction.jta.JtaTransactionManager.doRollback(JtaTransactionManager.java:1048) [spring-tx-4.2.2.RELEASE.jar:4.2.2.RELEASE]
at org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:853) [spring-tx-4.2.2.RELEASE.jar:4.2.2.RELEASE]
at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:830) [spring-tx-4.2.2.RELEASE.jar:4.2.2.RELEASE]
at org.springframework.transaction.support.TransactionTemplate.rollbackOnException(TransactionTemplate.java:164) [spring-tx-4.2.2.RELEASE.jar:4.2.2.RELEASE]
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:137) [spring-tx-4.2.2.RELEASE.jar:4.2.2.RELEASE]
at com.murex.demo.tx.publisher.SimplePublishService.publish(SimplePublishService.java:49) [classes/:na]
at com.murex.demo.tx.publisher.Publisher$PublisherTask.run(Publisher.java:55) [classes/:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_05]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_05]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_05]
{code}
The reason is that the response object in this case is not set at this point:
https://github.com/apache/incubator-geode/blob/develop/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/CommitCommand.java#L122
A sequence that leads to the error is following:
<JTA Transaction Manager>.begin()
region.put()
<JTA Transaction Manager>.registerSynchronization(TXStateProxyImpl)
<JTA Transaction Manager>.rollback()
TXStateProxyImpl.beforeCompletion()
TXStateProxyImpl.afterCompletion()
Im my scenario the transaction looks to roll back successfully even after NPE is thrown. Still some parts of the relevant code might be missed in that case and could lead potentially to other problems.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)