Skip to content

Commit 7405aa2

Browse files
committed
wip
1 parent 6d17b78 commit 7405aa2

File tree

1 file changed

+20
-34
lines changed

1 file changed

+20
-34
lines changed

driver/src/main/java/org/neo4j/driver/internal/async/UnmanagedTransaction.java

Lines changed: 20 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -145,12 +145,11 @@ else if ( commitStage != null )
145145
}
146146
else
147147
{
148-
CompletionStage<Void> partialStage = resultCursors
148+
commitStage = resultCursors
149149
.retrieveNotConsumedError()
150-
.thenCompose( error -> doCommitAsync( error ).handle( handleCommitOrRollback( error ) ) );
151-
CompletionStage<Void> resultStage = commitStage = partialStage.whenComplete( ( ignore, error ) -> releaseConnection( error ) );
152-
partialStage.whenComplete( ( ignored, error ) -> updateStateAfterCommitOrRollback( true, error ) );
153-
return resultStage;
150+
.thenCompose( error -> doCommitAsync( error ).handle( handleCommitOrRollback( error ) ) )
151+
.whenComplete( ( ignore, error ) -> handleTransactionCompletion( true, error ) );
152+
return commitStage;
154153
}
155154
} );
156155
}
@@ -173,12 +172,11 @@ else if ( rollbackStage != null )
173172
}
174173
else
175174
{
176-
CompletionStage<Void> partialStage = resultCursors
175+
rollbackStage = resultCursors
177176
.retrieveNotConsumedError()
178-
.thenCompose( error -> doRollbackAsync().handle( handleCommitOrRollback( error ) ) );
179-
CompletionStage<Void> resultStage = rollbackStage = partialStage.whenComplete( ( ignore, error ) -> releaseConnection( error ) );
180-
partialStage.whenComplete( ( ignored, error ) -> updateStateAfterCommitOrRollback( false, error ) );
181-
return resultStage;
177+
.thenCompose( error -> doRollbackAsync().handle( handleCommitOrRollback( error ) ) )
178+
.whenComplete( ( ignore, error ) -> handleTransactionCompletion( false, error ) );
179+
return rollbackStage;
182180
}
183181
} );
184182
}
@@ -294,8 +292,19 @@ private static BiFunction<Void,Throwable,Void> handleCommitOrRollback( Throwable
294292
};
295293
}
296294

297-
private void releaseConnection( Throwable throwable )
295+
private void handleTransactionCompletion( boolean commitAttempt, Throwable throwable )
298296
{
297+
executeWithLock( lock, () ->
298+
{
299+
if ( commitAttempt && throwable == null )
300+
{
301+
state = State.COMMITTED;
302+
}
303+
else
304+
{
305+
state = State.ROLLED_BACK;
306+
}
307+
} );
299308
if ( throwable instanceof AuthorizationExpiredException )
300309
{
301310
connection.terminateAndRelease( AuthorizationExpiredException.DESCRIPTION );
@@ -309,27 +318,4 @@ else if ( throwable instanceof ConnectionReadTimeoutException )
309318
connection.release(); // release in background
310319
}
311320
}
312-
313-
private void updateStateAfterCommitOrRollback( boolean commitAttempt, Throwable throwable )
314-
{
315-
executeWithLock( lock, () ->
316-
{
317-
if ( commitAttempt && throwable == null )
318-
{
319-
state = State.COMMITTED;
320-
}
321-
else
322-
{
323-
state = State.ROLLED_BACK;
324-
}
325-
if ( commitAttempt )
326-
{
327-
commitStage = null;
328-
}
329-
else
330-
{
331-
rollbackStage = null;
332-
}
333-
} );
334-
}
335321
}

0 commit comments

Comments
 (0)