You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@geode.apache.org by "Eric Shu (JIRA)" <ji...@apache.org> on 2017/07/11 17:07:00 UTC

[jira] [Commented] (GEODE-3178) CI failure: org.apache.geode.internal.jta.ClientServerJTADUnitTest.testClientTXStateStubBeforeCompletion failed with org.apache.geode.cache.SynchronizationCommitConflictException

    [ https://issues.apache.org/jira/browse/GEODE-3178?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16082524#comment-16082524 ] 

Eric Shu commented on GEODE-3178:
---------------------------------

In tx commit method, local lock is released after tx change is applied to the cache. This could cause the test to fail with above exception.

{noformat}
      try {

        /*
         * In order to preserve data consistency, we need to: 1. Modify the cache first
         * (applyChanges) 2. Ask for advice on who to send to (buildMessage) 3. Send out to other
         * members.
         * 
         * If this is done out of order, we will have problems with GII, split brain, and HA. See
         * bug #41187
         * 
         * @gregp
         */

        attachFilterProfileInformation(entries);

        lockTXRegions(regions);

        try {
          // apply changes to the cache
         -->  applyChanges(entries);
          // For internal testing
          if (this.internalAfterApplyChanges != null) {
            this.internalAfterApplyChanges.run();
          }

          // build and send the message
          msg = buildMessage();
          this.commitMessage = msg;
          if (this.internalBeforeSend != null) {
            this.internalBeforeSend.run();
          }

          msg.send(this.locks.getDistributedLockId());
          // For internal testing
          if (this.internalAfterSend != null) {
            this.internalAfterSend.run();
          }

          firePendingCallbacks();
          /*
           * This is to prepare the commit message for the caller, make sure all events are in
           * there.
           */
          this.commitMessage = buildCompleteMessage();
        } finally {
          unlockTXRegions(regions);
        }
      } finally {
        if (msg != null) {
          msg.releaseViewVersions();
        }
       -->  this.locks.releaseLocal();
        // For internal testing
        if (this.internalAfterReleaseLocalLocks != null) {
          this.internalAfterReleaseLocalLocks.run();
        }
      }
{noformat}

> CI failure: org.apache.geode.internal.jta.ClientServerJTADUnitTest.testClientTXStateStubBeforeCompletion failed with org.apache.geode.cache.SynchronizationCommitConflictException
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: GEODE-3178
>                 URL: https://issues.apache.org/jira/browse/GEODE-3178
>             Project: Geode
>          Issue Type: Bug
>          Components: transactions
>            Reporter: Lynn Gallinat
>            Assignee: Eric Shu
>
> {noformat}
> org.apache.geode.internal.jta.ClientServerJTADUnitTest > testClientTXStateStubBeforeCompletion FAILED
>     java.lang.AssertionError: got unexpected exception
>         at org.apache.geode.test.dunit.Assert.fail(Assert.java:60)
>         at org.apache.geode.internal.jta.ClientServerJTADUnitTest.testClientTXStateStubBeforeCompletion(ClientServerJTADUnitTest.java:105)
>         Caused by:
>         org.apache.geode.cache.SynchronizationCommitConflictException: Conflict detected in GemFire transaction  TXId: 172.17.0.8(1:loner):42906:ca531220:2, caused by org.apache.geode.cache.CommitConflictException: Concurrent transaction commit detected The key  key  in region  /ClientServerJTADUnitTest_testClientTXStateStubBeforeCompletion  was being modified by another transaction locally.
>             Caused by:
>             org.apache.geode.cache.CommitConflictException: Concurrent transaction commit detected The key  key  in region  /ClientServerJTADUnitTest_testClientTXStateStubBeforeCompletion  was being modified by another transaction locally.
>     java.lang.AssertionError: Suspicious strings were written to the log during this run.
>     Fix the strings or use IgnoredException.addIgnoredException to ignore.
>     -----------------------------------------------------------------------
>     Found suspect string in log4j at line 346
>     [error 2017/07/08 02:40:58.618 UTC <Test worker> tid=0x16] Failure during tearDown destroyRegions for /ClientServerJTADUnitTest_testClientTXStateStubBeforeCompletion
>     org.apache.geode.cache.UnsupportedOperationInTransactionException: destroyRegion() is not supported while in a transaction
>     	at org.apache.geode.internal.cache.TXStateProxyImpl.checkSupportsRegionDestroy(TXStateProxyImpl.java:622)
>     	at org.apache.geode.internal.cache.LocalRegion.localDestroyRegion(LocalRegion.java:2189)
>     	at org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase.destroyRegions(JUnit4DistributedTestCase.java:637)
>     	at org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase.remoteTearDown(JUnit4CacheTestCase.java:419)
>     	at org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase.tearDownCacheTestCase(JUnit4CacheTestCase.java:395)
>     	at org.apache.geode.test.dunit.cache.internal.JUnit4CacheTestCase.preTearDown(JUnit4CacheTestCase.java:390)
>     	at org.apache.geode.test.dunit.internal.JUnit4DistributedTestCase.tearDown(JUnit4DistributedTestCase.java:508)
>     	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.RunAfters.evaluate(RunAfters.java:33)
>     	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.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
>     	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
>     	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
>     	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
>     	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
>     	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
>     	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.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
>     	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
>     	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
>     	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
>     	at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
>     	at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
>     	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.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
>     	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
>     	at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377)
>     	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
>     	at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
>     	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>     	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>     	at java.lang.Thread.run(Thread.java:748){noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)