You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When a default transaction fails (e.g. because of constraint violation) it is not cleared from threadlocal, subsequent calls to the session fail with transaction already closed.
org.neo4j.ogm.exception.CypherException: Error executing Cypher; Code: N/A; Description: Cannot run more statements in this transaction, because previous statements in the transaction has failed and the transaction has been rolled back. Please start a new transaction to run another statement.
at org.neo4j.ogm.drivers.bolt.request.BoltRequest.executeRequest(BoltRequest.java:164)
at org.neo4j.ogm.drivers.bolt.request.BoltRequest.execute(BoltRequest.java:70)
at org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:72)
at org.neo4j.ogm.session.delegates.LoadOneDelegate.load(LoadOneDelegate.java:49)
at org.neo4j.ogm.session.Neo4jSession.load(Neo4jSession.java:155)
at org.neo4j.ogm.persistence.transaction.DefaultTransactionTest.shouldBeAbleToUseSessionAfterDefaultTransactionFails(DefaultTransactionTest.java:77)
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.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
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.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.neo4j.driver.v1.exceptions.ClientException: Cannot run more statements in this transaction, because previous statements in the transaction has failed and the transaction has been rolled back. Please start a new transaction to run another statement.
at org.neo4j.driver.internal.ExplicitTransaction.ensureNotFailed(ExplicitTransaction.java:220)
at org.neo4j.driver.internal.ExplicitTransaction.run(ExplicitTransaction.java:188)
at org.neo4j.driver.internal.ExplicitTransaction.run(ExplicitTransaction.java:162)
at org.neo4j.driver.internal.ExplicitTransaction.run(ExplicitTransaction.java:175)
at org.neo4j.ogm.drivers.bolt.request.BoltRequest.executeRequest(BoltRequest.java:156)
... 30 more
Expected Behavior
The transaction should be cleared from the thread local.
The exception should be re-thrown.
The thrown exception should be same for all drivers.
The session should be usable after the exception.
The session context should contain correct data.
Current Behavior
Possible Solution
Issue is in org.neo4j.ogm.session.request.RequestExecutor#executeSave(org.neo4j.ogm.cypher.compiler.CompileContext, boolean)
It creates a new transaction when there is none, but then it does not handle the failure case.
Steps to Reproduce (for bugs)
See test case.
Context
Your Environment
OGM Version used: 3.0.0-SNAPSHOT
Java Version used: 1.8
Neo4J Version used: 3.2.3
Bolt Driver Version used (if applicable):1.4
The text was updated successfully, but these errors were encountered:
When a default transaction fails (e.g. because of constraint violation) it is not cleared from threadlocal, subsequent calls to the session fail with transaction already closed.
Expected Behavior
The transaction should be cleared from the thread local.
The exception should be re-thrown.
The thrown exception should be same for all drivers.
The session should be usable after the exception.
The session context should contain correct data.
Current Behavior
Possible Solution
Issue is in org.neo4j.ogm.session.request.RequestExecutor#executeSave(org.neo4j.ogm.cypher.compiler.CompileContext, boolean)
It creates a new transaction when there is none, but then it does not handle the failure case.
Steps to Reproduce (for bugs)
See test case.
Context
Your Environment
The text was updated successfully, but these errors were encountered: