Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ClaimsListShardTest Occasional test failure #11

Open
wolfgangmeyers opened this issue Apr 4, 2016 · 1 comment
Open

ClaimsListShardTest Occasional test failure #11

wolfgangmeyers opened this issue Apr 4, 2016 · 1 comment

Comments

@wolfgangmeyers
Copy link
Contributor

@wolfgangmeyers wolfgangmeyers commented Apr 4, 2016

Our CI system sometimes has the build fail due to com.google.domain.registry.model.tmch.ClaimsListShardTest.test_savesAndGets_withSharding - This test does not fail every time, but fails intermittently:

com.google.common.util.concurrent.UncheckedExecutionException: java.lang.IllegalArgumentException: transaction closed
    at com.google.domain.registry.util.Concurrent.transform(Concurrent.java:92)
    at com.google.domain.registry.util.Concurrent.transform(Concurrent.java:50)
    at com.google.domain.registry.model.tmch.ClaimsListShard.save(ClaimsListShard.java:166)
    at com.google.domain.registry.model.tmch.ClaimsListShardTest.test_savesAndGets_withSharding(ClaimsListShardTest.java:84)
    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:497)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
    at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:48)
    at com.google.domain.registry.testing.ExceptionRule$1.evaluate(ExceptionRule.java:58)
    at org.junit.rules.RunRules.evaluate(RunRules.java:20)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:670)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.IllegalArgumentException: transaction closed
    at com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:54)
    at com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:129)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:96)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.googlecode.objectify.cache.TriggerFuture.get(TriggerFuture.java:102)
    at com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:88)
    at com.googlecode.objectify.util.FutureHelper.quietGet(FutureHelper.java:26)
    at com.googlecode.objectify.impl.TransactionImpl.commit(TransactionImpl.java:45)
    at com.googlecode.objectify.impl.TransactorNo.transactOnce(TransactorNo.java:119)
    at com.googlecode.objectify.impl.TransactorNo.transactNew(TransactorNo.java:95)
    at com.googlecode.objectify.impl.ObjectifyImpl.transactNew(ObjectifyImpl.java:193)
    at com.googlecode.objectify.impl.ObjectifyImpl.transactNew(ObjectifyImpl.java:185)
    at com.google.domain.registry.model.ofy.Ofy.transactCommitLoggedWork(Ofy.java:224)
    at com.google.domain.registry.model.ofy.Ofy.transactNew(Ofy.java:209)
    at com.google.domain.registry.model.tmch.ClaimsListShard$2.apply(ClaimsListShard.java:170)
    at com.google.domain.registry.model.tmch.ClaimsListShard$2.apply(ClaimsListShard.java:1)
    at com.google.domain.registry.util.Concurrent$1.call(Concurrent.java:84)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at com.google.appengine.tools.development.RequestThreadFactory$1$1$2.run(RequestThreadFactory.java:110)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.google.appengine.tools.development.RequestThreadFactory$1$1.run(RequestThreadFactory.java:107)

@jart
Copy link
Contributor

@jart jart commented Apr 5, 2016

It's sort of a datastore API bug. This is supposed to be a ConcurrentModificationException exception, which would trigger Objectify to retry. But there are some circumstances under which multiple threads performing XG transactions will cause that error to show up as IAE. The issue hasn't been fixed yet. We also don't really experience this flake in our CI.

How are you invoking the tests in your CI? Are you running bazel test //... or something? If so, can you ignore the pattern that causes this test to run? Like maybe bazel test //... -//javatests/com/google/domain/registry.model.tmch:ClaimsListShardTest or something.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
2 participants
You can’t perform that action at this time.