@@ -95,7 +95,7 @@ static class Builder extends AbstractReadContext.Builder<Builder, TransactionCon
9595 private ByteString transactionId ;
9696 // This field is set only when the transaction is created during a retry and uses a
9797 // multiplexed session.
98- private ByteString previousAbortedTransactionId ;
98+ private ByteString previousTransactionId ;
9999 private Options options ;
100100 private boolean trackTransactionStarter ;
101101
@@ -121,8 +121,8 @@ Builder setTrackTransactionStarter(boolean trackTransactionStarter) {
121121 return self ();
122122 }
123123
124- Builder setPreviousAbortedTransactionId (ByteString previousAbortedTransactionId ) {
125- this .previousAbortedTransactionId = previousAbortedTransactionId ;
124+ Builder setPreviousTransactionId (ByteString previousTransactionId ) {
125+ this .previousTransactionId = previousTransactionId ;
126126 return self ();
127127 }
128128
@@ -209,7 +209,7 @@ public void removeListener(Runnable listener) {
209209
210210 volatile ByteString transactionId ;
211211
212- ByteString previousAbortedTransactionId ;
212+ ByteString previousTransactionId ;
213213
214214 private CommitResponse commitResponse ;
215215 private final Clock clock ;
@@ -226,7 +226,7 @@ private TransactionContextImpl(Builder builder) {
226226 this .channelHint =
227227 getChannelHintOptions (
228228 session .getOptions (), ThreadLocalRandom .current ().nextLong (Long .MAX_VALUE ));
229- this .previousAbortedTransactionId = builder .previousAbortedTransactionId ;
229+ this .previousTransactionId = builder .previousTransactionId ;
230230 }
231231
232232 @ Override
@@ -295,10 +295,7 @@ private void createTxnAsync(final SettableApiFuture<Void> res) {
295295 span .addAnnotation ("Creating Transaction" );
296296 final ApiFuture <ByteString > fut =
297297 session .beginTransactionAsync (
298- options ,
299- isRouteToLeader (),
300- getTransactionChannelHint (),
301- previousAbortedTransactionId );
298+ options , isRouteToLeader (), getTransactionChannelHint (), previousTransactionId );
302299 fut .addListener (
303300 () -> {
304301 try {
@@ -574,8 +571,7 @@ TransactionSelector getTransactionSelector() {
574571 if (tx == null ) {
575572 return TransactionSelector .newBuilder ()
576573 .setBegin (
577- SessionImpl .createReadWriteTransactionOptions (
578- options , previousAbortedTransactionId ))
574+ SessionImpl .createReadWriteTransactionOptions (options , previousTransactionId ))
579575 .build ();
580576 } else {
581577 // Wait for the transaction to come available. The tx.get() call will fail with an
@@ -1135,9 +1131,16 @@ private <T> T runInternal(final TransactionCallable<T> txCallable) {
11351131 // actually start a transaction.
11361132 useInlinedBegin = txn .transactionId != null ;
11371133
1138- ByteString previousAbortedTransactionId =
1139- session .getIsMultiplexed () ? txn .transactionId : null ;
1140- txn = session .newTransaction (options , previousAbortedTransactionId );
1134+ // Determine the latest transactionId when using a multiplexed session.
1135+ ByteString multiplexedSessionPreviousTransactionId = null ;
1136+ if (session .getIsMultiplexed ()) {
1137+ // Use the current transactionId if available, otherwise fallback to the previous
1138+ // transactionId.
1139+ multiplexedSessionPreviousTransactionId =
1140+ txn .transactionId != null ? txn .transactionId : txn .previousTransactionId ;
1141+ }
1142+
1143+ txn = session .newTransaction (options , multiplexedSessionPreviousTransactionId );
11411144 }
11421145 checkState (
11431146 isValid , "TransactionRunner has been invalidated by a new operation on the session" );
0 commit comments