Eric Shu created GEODE-5400: ------------------------------- Summary: JTA transaction locks are not released if the jta originator is crashed after beforeCompletion is executed Key: GEODE-5400 URL: https://issues.apache.org/jira/browse/GEODE-5400 Project: Geode Issue Type: Bug Components: transactions Reporter: Eric Shu
Currently when the JTA originator is departed, a membership listener will be invoked to clean the transactions initiated by the departed member. However, if the member is departed after JTA beforeCompletion is run, the locks are not released. Here is a distributed test failure showing new transaction could not finish even though the JTA transaction was closed/removed after the memberDeparted invocation. {noformat} rg.apache.geode.test.dunit.RMIException: While invoking org.apache.geode.internal.cache.tx.ClientServerJTAFailoverDistributedTest$$Lambda$26/573958827.run in VM 0 running on Host 10.118.20.64 with 4 VMs at org.apache.geode.test.dunit.VM.invoke(VM.java:436) at org.apache.geode.test.dunit.VM.invoke(VM.java:405) at org.apache.geode.test.dunit.VM.invoke(VM.java:348) at org.apache.geode.internal.cache.tx.ClientServerJTAFailoverDistributedTest.locksHeldInBeforeCompletionCanBeReleaseIfOriginatorDeparted(ClientServerJTAFailoverDistributedTest.java:284) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.apache.geode.test.dunit.rules.AbstractDistributedTestRule$1.evaluate(AbstractDistributedTestRule.java:60) at org.apache.geode.test.dunit.rules.AbstractDistributedTestRule$1.evaluate(AbstractDistributedTestRule.java:60) at org.apache.geode.test.dunit.rules.AbstractDistributedTestRule$1.evaluate(AbstractDistributedTestRule.java:60) at org.junit.rules.TestWatcher$1.evaluate(TestWatcher.java:55) at org.junit.rules.RunRules.evaluate(RunRules.java:20) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70) Caused by: org.apache.geode.cache.CommitConflictException: The key 1 in region /__PR/_B__ClientServerJTAFailoverDistributedTest__locksHeldInBeforeCompletionCanBeReleaseIfOriginatorDeparted__region_0 was being modified by another transaction locally. at org.apache.geode.internal.cache.TXReservationMgr.checkSetForConflict(TXReservationMgr.java:107) at org.apache.geode.internal.cache.TXReservationMgr.checkForConflict(TXReservationMgr.java:77) at org.apache.geode.internal.cache.TXReservationMgr.makeReservation(TXReservationMgr.java:56) at org.apache.geode.internal.cache.TXLockRequest.txLocalLock(TXLockRequest.java:151) at org.apache.geode.internal.cache.TXLockRequest.obtain(TXLockRequest.java:84) at org.apache.geode.internal.cache.TXState.reserveAndCheck(TXState.java:342) at org.apache.geode.internal.cache.TXState.commit(TXState.java:413) at org.apache.geode.internal.cache.TXStateProxyImpl.commit(TXStateProxyImpl.java:226) at org.apache.geode.internal.cache.TXManagerImpl.commit(TXManagerImpl.java:413) at org.apache.geode.internal.cache.tx.ClientServerJTAFailoverDistributedTest.doPutTransaction(ClientServerJTAFailoverDistributedTest.java:271) at org.apache.geode.internal.cache.tx.ClientServerJTAFailoverDistributedTest.lambda$locksHeldInBeforeCompletionCanBeReleaseIfOriginatorDeparted$bb17a952$4(ClientServerJTAFailoverDistributedTest.java:284) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at hydra.MethExecutor.executeObject(MethExecutor.java:244) at org.apache.geode.test.dunit.standalone.RemoteDUnitVM.executeMethodOnObject(RemoteDUnitVM.java:70) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357) at sun.rmi.transport.Transport$1.run(Transport.java:200) at sun.rmi.transport.Transport$1.run(Transport.java:197) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.Transport.serviceCall(Transport.java:196) at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683) at java.security.AccessController.doPrivileged(Native Method) at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Process finished with exit code 255 {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)