diff --git a/driver/src/main/java/org/neo4j/driver/internal/async/UnmanagedTransaction.java b/driver/src/main/java/org/neo4j/driver/internal/async/UnmanagedTransaction.java index acbd34e157..5f1473321f 100644 --- a/driver/src/main/java/org/neo4j/driver/internal/async/UnmanagedTransaction.java +++ b/driver/src/main/java/org/neo4j/driver/internal/async/UnmanagedTransaction.java @@ -182,7 +182,7 @@ else if ( state.value == State.ROLLED_BACK ) { return resultCursors.retrieveNotConsumedError() .thenCompose( error -> doCommitAsync( error ).handle( handleCommitOrRollback( error ) ) ) - .whenComplete( ( ignore, error ) -> handleTransactionCompletion( State.COMMITTED, error ) ); + .whenComplete( ( ignore, error ) -> handleTransactionCompletion( true, error ) ); } } @@ -200,7 +200,7 @@ else if ( state.value == State.ROLLED_BACK ) { return resultCursors.retrieveNotConsumedError() .thenCompose( error -> doRollbackAsync().handle( handleCommitOrRollback( error ) ) ) - .whenComplete( ( ignore, error ) -> handleTransactionCompletion( State.ROLLED_BACK, error ) ); + .whenComplete( ( ignore, error ) -> handleTransactionCompletion( false, error ) ); } } @@ -287,16 +287,24 @@ private static BiFunction handleCommitOrRollback( Throwable }; } - private void handleTransactionCompletion( State onSuccessState, Throwable throwable ) + private void handleTransactionCompletion( boolean commitOnSuccess, Throwable throwable ) { + if ( commitOnSuccess && throwable == null ) + { + state = StateHolder.of( State.COMMITTED ); + } + else + { + state = StateHolder.of( State.ROLLED_BACK ); + } + if ( throwable instanceof AuthorizationExpiredException ) { - markTerminated( throwable ); connection.terminateAndRelease( AuthorizationExpiredException.DESCRIPTION ); - return; } - - state = StateHolder.of( onSuccessState ); - connection.release(); // release in background + else + { + connection.release(); // release in background + } } }