diff --git a/community/server/src/main/java/org/neo4j/server/rest/transactional/TransactionHandle.java b/community/server/src/main/java/org/neo4j/server/rest/transactional/TransactionHandle.java index a872b572220d6..5b95180504446 100644 --- a/community/server/src/main/java/org/neo4j/server/rest/transactional/TransactionHandle.java +++ b/community/server/src/main/java/org/neo4j/server/rest/transactional/TransactionHandle.java @@ -320,7 +320,9 @@ private void executeStatements( StatementDeserializer statements, ExecutionResul hasPrevious = true; TransactionalContext tc = txManagerFacade.create( request, queryService, type, loginContext, statement.statement(), statement.parameters() ); - safelyExecute( statement, hasPeriodicCommit, tc, output ); + Result result = safelyExecute( statement, hasPeriodicCommit, tc ); + output.statementResult( result, statement.includeStats(), statement.resultDataContents() ); + output.notifications( result.getNotifications() ); } catch ( KernelException | CypherException | AuthorizationViolationException | WriteOperationsNotAllowedException e ) @@ -361,16 +363,13 @@ private void executeStatements( StatementDeserializer statements, ExecutionResul } } - private void safelyExecute( Statement statement, + private Result safelyExecute( Statement statement, boolean hasPeriodicCommit, - TransactionalContext tc, - ExecutionResultSerializer output ) throws QueryExecutionKernelException, IOException + TransactionalContext tc ) throws QueryExecutionKernelException, IOException { try { - Result result = engine.executeQuery( statement.statement(), ValueUtils.asMapValue( statement.parameters() ), tc ); - output.statementResult( result, statement.includeStats(), statement.resultDataContents() ); - output.notifications( result.getNotifications() ); + return engine.executeQuery( statement.statement(), ValueUtils.asMapValue( statement.parameters() ), tc ); } finally { diff --git a/community/server/src/main/java/org/neo4j/server/rest/transactional/TransitionalTxManagementKernelTransaction.java b/community/server/src/main/java/org/neo4j/server/rest/transactional/TransitionalTxManagementKernelTransaction.java index 1d5b0430dd523..f2126cc0c90a4 100644 --- a/community/server/src/main/java/org/neo4j/server/rest/transactional/TransitionalTxManagementKernelTransaction.java +++ b/community/server/src/main/java/org/neo4j/server/rest/transactional/TransitionalTxManagementKernelTransaction.java @@ -21,6 +21,7 @@ import java.util.concurrent.TimeUnit; +import org.neo4j.graphdb.NotInTransactionException; import org.neo4j.graphdb.factory.GraphDatabaseSettings; import org.neo4j.internal.kernel.api.exceptions.TransactionFailureException; import org.neo4j.internal.kernel.api.security.LoginContext; @@ -96,6 +97,10 @@ public void commit() kernelTransactionBoundToThisThread.success(); kernelTransactionBoundToThisThread.close(); } + catch ( NotInTransactionException e ) + { + // if the transaction was already terminated there is nothing more to do + } catch ( TransactionFailureException e ) { throw new RuntimeException( e ); diff --git a/community/server/src/test/java/org/neo4j/server/rest/transactional/integration/TransactionIT.java b/community/server/src/test/java/org/neo4j/server/rest/transactional/integration/TransactionIT.java index 93595154a52f5..b892a6deeaa7f 100644 --- a/community/server/src/test/java/org/neo4j/server/rest/transactional/integration/TransactionIT.java +++ b/community/server/src/test/java/org/neo4j/server/rest/transactional/integration/TransactionIT.java @@ -325,7 +325,7 @@ public void begin_and_execute_periodic_commit_that_returns_data_and_commit() thr Response response = http.POST( "db/data/transaction/commit", quotedJson( "{ 'statements': [ { 'statement': 'USING PERIODIC COMMIT " + batchSize + " LOAD CSV FROM " + - "\\\"" + url + "\\\" AS line CREATE (n {id: 23}) RETURN n' } ] }" ) + "\\\"" + url + "\\\" AS line CREATE (n {id1: 23}) RETURN n' } ] }" ) ); long txIdAfter = resolveDependency( TransactionIdStore.class ).getLastClosedTransactionId();