@@ -98,7 +98,7 @@ public void setUp() {
9898
9999 @ Test
100100 public void beginCalledTwiceFails () {
101- when (session .newTransaction (Options .fromTransactionOptions ())).thenReturn (txn );
101+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
102102 assertThat (manager .begin ()).isEqualTo (txn );
103103 assertThat (manager .getState ()).isEqualTo (TransactionState .STARTED );
104104 IllegalStateException e = assertThrows (IllegalStateException .class , () -> manager .begin ());
@@ -126,7 +126,7 @@ public void resetBeforeBeginFails() {
126126
127127 @ Test
128128 public void transactionRolledBackOnClose () {
129- when (session .newTransaction (Options .fromTransactionOptions ())).thenReturn (txn );
129+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
130130 when (txn .isAborted ()).thenReturn (false );
131131 manager .begin ();
132132 manager .close ();
@@ -135,7 +135,7 @@ public void transactionRolledBackOnClose() {
135135
136136 @ Test
137137 public void commitSucceeds () {
138- when (session .newTransaction (Options .fromTransactionOptions ())).thenReturn (txn );
138+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
139139 Timestamp commitTimestamp = Timestamp .ofTimeMicroseconds (1 );
140140 CommitResponse response = new CommitResponse (commitTimestamp );
141141 when (txn .getCommitResponse ()).thenReturn (response );
@@ -147,7 +147,7 @@ public void commitSucceeds() {
147147
148148 @ Test
149149 public void resetAfterSuccessfulCommitFails () {
150- when (session .newTransaction (Options .fromTransactionOptions ())).thenReturn (txn );
150+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
151151 manager .begin ();
152152 manager .commit ();
153153 IllegalStateException e =
@@ -157,21 +157,21 @@ public void resetAfterSuccessfulCommitFails() {
157157
158158 @ Test
159159 public void resetAfterAbortSucceeds () {
160- when (session .newTransaction (Options .fromTransactionOptions ())).thenReturn (txn );
160+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
161161 manager .begin ();
162162 doThrow (SpannerExceptionFactory .newSpannerException (ErrorCode .ABORTED , "" )).when (txn ).commit ();
163163 assertThrows (AbortedException .class , () -> manager .commit ());
164164 assertEquals (TransactionState .ABORTED , manager .getState ());
165165
166166 txn = Mockito .mock (TransactionRunnerImpl .TransactionContextImpl .class );
167- when (session .newTransaction (Options .fromTransactionOptions ())).thenReturn (txn );
167+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
168168 assertThat (manager .resetForRetry ()).isEqualTo (txn );
169169 assertThat (manager .getState ()).isEqualTo (TransactionState .STARTED );
170170 }
171171
172172 @ Test
173173 public void resetAfterErrorFails () {
174- when (session .newTransaction (Options .fromTransactionOptions ())).thenReturn (txn );
174+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
175175 manager .begin ();
176176 doThrow (SpannerExceptionFactory .newSpannerException (ErrorCode .UNKNOWN , "" )).when (txn ).commit ();
177177 SpannerException e = assertThrows (SpannerException .class , () -> manager .commit ());
@@ -184,7 +184,7 @@ public void resetAfterErrorFails() {
184184
185185 @ Test
186186 public void rollbackAfterCommitFails () {
187- when (session .newTransaction (Options .fromTransactionOptions ())).thenReturn (txn );
187+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
188188 manager .begin ();
189189 manager .commit ();
190190 IllegalStateException e = assertThrows (IllegalStateException .class , () -> manager .rollback ());
@@ -193,7 +193,7 @@ public void rollbackAfterCommitFails() {
193193
194194 @ Test
195195 public void commitAfterRollbackFails () {
196- when (session .newTransaction (Options .fromTransactionOptions ())).thenReturn (txn );
196+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
197197 manager .begin ();
198198 manager .rollback ();
199199 IllegalStateException e = assertThrows (IllegalStateException .class , () -> manager .commit ());
@@ -363,4 +363,42 @@ public void inlineBegin() {
363363 assertThat (transactionsStarted .get ()).isEqualTo (1 );
364364 }
365365 }
366+
367+ @ Test
368+ public void storePreviousTxnIdOnAbortForMultiplexedSession () {
369+ txn = Mockito .mock (TransactionRunnerImpl .TransactionContextImpl .class );
370+ final ByteString mockTransactionId = ByteString .copyFromUtf8 ("mockTransactionId" );
371+ txn .transactionId = mockTransactionId ;
372+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
373+ manager .begin ();
374+ doThrow (SpannerExceptionFactory .newSpannerException (ErrorCode .ABORTED , "" )).when (txn ).commit ();
375+ assertThrows (AbortedException .class , () -> manager .commit ());
376+ assertEquals (TransactionState .ABORTED , manager .getState ());
377+
378+ txn = Mockito .mock (TransactionRunnerImpl .TransactionContextImpl .class );
379+ txn .previousAbortedTransactionId = mockTransactionId ;
380+ when (session .newTransaction (Options .fromTransactionOptions (), mockTransactionId ))
381+ .thenReturn (txn );
382+ when (session .getIsMultiplexed ()).thenReturn (true );
383+ assertThat (manager .resetForRetry ()).isEqualTo (txn );
384+ assertThat (manager .getState ()).isEqualTo (TransactionState .STARTED );
385+ }
386+
387+ @ Test
388+ public void skipTxnIdStorageOnAbortForRegularSession () {
389+ txn = Mockito .mock (TransactionRunnerImpl .TransactionContextImpl .class );
390+ final ByteString mockTransactionId = ByteString .copyFromUtf8 ("mockTransactionId" );
391+ txn .transactionId = mockTransactionId ;
392+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
393+ manager .begin ();
394+ doThrow (SpannerExceptionFactory .newSpannerException (ErrorCode .ABORTED , "" )).when (txn ).commit ();
395+ assertThrows (AbortedException .class , () -> manager .commit ());
396+ assertEquals (TransactionState .ABORTED , manager .getState ());
397+
398+ txn = Mockito .mock (TransactionRunnerImpl .TransactionContextImpl .class );
399+ when (session .newTransaction (Options .fromTransactionOptions (), null )).thenReturn (txn );
400+ when (session .getIsMultiplexed ()).thenReturn (false );
401+ assertThat (manager .resetForRetry ()).isEqualTo (txn );
402+ assertThat (manager .getState ()).isEqualTo (TransactionState .STARTED );
403+ }
366404}
0 commit comments