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)

Reply via email to