30
30
import com .google .cloud .spanner .Options .TransactionOption ;
31
31
import com .google .cloud .spanner .Options .UpdateOption ;
32
32
import com .google .cloud .spanner .SessionClient .SessionOption ;
33
+ import com .google .cloud .spanner .SpannerOptions .Builder .TransactionOptions ;
33
34
import com .google .cloud .spanner .TransactionRunnerImpl .TransactionContextImpl ;
34
35
import com .google .cloud .spanner .spi .v1 .SpannerRpc ;
35
36
import com .google .common .base .Ticker ;
44
45
import com .google .spanner .v1 .CommitRequest ;
45
46
import com .google .spanner .v1 .RequestOptions ;
46
47
import com .google .spanner .v1 .Transaction ;
47
- import com .google .spanner .v1 .TransactionOptions ;
48
48
import java .time .Instant ;
49
49
import java .util .ArrayList ;
50
50
import java .util .Collection ;
@@ -69,15 +69,18 @@ static void throwIfTransactionsPending() {
69
69
}
70
70
}
71
71
72
- static TransactionOptions createReadWriteTransactionOptions (
72
+ static com . google . spanner . v1 . TransactionOptions createReadWriteTransactionOptions (
73
73
Options options , ByteString previousTransactionId ) {
74
- TransactionOptions .Builder transactionOptions = TransactionOptions .newBuilder ();
74
+ com .google .spanner .v1 .TransactionOptions .Builder transactionOptions =
75
+ com .google .spanner .v1 .TransactionOptions .newBuilder ();
75
76
if (options .withExcludeTxnFromChangeStreams () == Boolean .TRUE ) {
76
77
transactionOptions .setExcludeTxnFromChangeStreams (true );
77
78
}
78
- TransactionOptions .ReadWrite .Builder readWrite = TransactionOptions .ReadWrite .newBuilder ();
79
+ com .google .spanner .v1 .TransactionOptions .ReadWrite .Builder readWrite =
80
+ com .google .spanner .v1 .TransactionOptions .ReadWrite .newBuilder ();
79
81
if (options .withOptimisticLock () == Boolean .TRUE ) {
80
- readWrite .setReadLockMode (TransactionOptions .ReadWrite .ReadLockMode .OPTIMISTIC );
82
+ readWrite .setReadLockMode (
83
+ com .google .spanner .v1 .TransactionOptions .ReadWrite .ReadLockMode .OPTIMISTIC );
81
84
}
82
85
if (previousTransactionId != null
83
86
&& previousTransactionId != com .google .protobuf .ByteString .EMPTY ) {
@@ -196,6 +199,14 @@ void markUsed(Instant instant) {
196
199
sessionReference .markUsed (instant );
197
200
}
198
201
202
+ com .google .spanner .v1 .TransactionOptions defaultTransactionOptions () {
203
+ TransactionOptions transactionOptions =
204
+ this .spanner .getOptions ().getDefaultTransactionOptions ();
205
+ return transactionOptions != null
206
+ ? transactionOptions .getTransactionOptions ()
207
+ : com .google .spanner .v1 .TransactionOptions .getDefaultInstance ();
208
+ }
209
+
199
210
public DatabaseId getDatabaseId () {
200
211
return sessionReference .getDatabaseId ();
201
212
}
@@ -242,26 +253,24 @@ public CommitResponse writeAtLeastOnceWithOptions(
242
253
setActive (null );
243
254
List <com .google .spanner .v1 .Mutation > mutationsProto = new ArrayList <>();
244
255
Mutation .toProtoAndReturnRandomMutation (mutations , mutationsProto );
245
- Options options =
246
- Options .fromTransactionOptions (
247
- TransactionOption .combine (
248
- transactionOptions , this .spanner .getOptions ().getTransactionOptions ()));
256
+ Options options = Options .fromTransactionOptions (transactionOptions );
249
257
final CommitRequest .Builder requestBuilder =
250
258
CommitRequest .newBuilder ()
251
259
.setSession (getName ())
252
260
.setReturnCommitStats (options .withCommitStats ())
253
261
.addAllMutations (mutationsProto );
254
262
255
- TransactionOptions .Builder transactionOptionsBuilder =
256
- TransactionOptions .newBuilder ()
257
- .setReadWrite (TransactionOptions .ReadWrite .getDefaultInstance ());
263
+ com . google . spanner . v1 . TransactionOptions .Builder transactionOptionsBuilder =
264
+ com . google . spanner . v1 . TransactionOptions .newBuilder ()
265
+ .setReadWrite (com . google . spanner . v1 . TransactionOptions .ReadWrite .getDefaultInstance ());
258
266
if (options .withExcludeTxnFromChangeStreams () == Boolean .TRUE ) {
259
267
transactionOptionsBuilder .setExcludeTxnFromChangeStreams (true );
260
268
}
261
269
if (options .isolationLevel () != null ) {
262
270
transactionOptionsBuilder .setIsolationLevel (options .isolationLevel ());
263
271
}
264
- requestBuilder .setSingleUseTransaction (transactionOptionsBuilder );
272
+ requestBuilder .setSingleUseTransaction (
273
+ this .defaultTransactionOptions ().toBuilder ().mergeFrom (transactionOptionsBuilder .build ()));
265
274
266
275
if (options .hasMaxCommitDelay ()) {
267
276
requestBuilder .setMaxCommitDelay (
@@ -405,37 +414,22 @@ public ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) {
405
414
406
415
@ Override
407
416
public TransactionRunner readWriteTransaction (TransactionOption ... options ) {
408
- return setActive (
409
- new TransactionRunnerImpl (
410
- this ,
411
- TransactionOption .combine (options , this .spanner .getOptions ().getTransactionOptions ())));
417
+ return setActive (new TransactionRunnerImpl (this , options ));
412
418
}
413
419
414
420
@ Override
415
421
public AsyncRunner runAsync (TransactionOption ... options ) {
416
- return new AsyncRunnerImpl (
417
- setActive (
418
- new TransactionRunnerImpl (
419
- this ,
420
- TransactionOption .combine (
421
- options , this .spanner .getOptions ().getTransactionOptions ()))));
422
+ return new AsyncRunnerImpl (setActive (new TransactionRunnerImpl (this , options )));
422
423
}
423
424
424
425
@ Override
425
426
public TransactionManager transactionManager (TransactionOption ... options ) {
426
- return new TransactionManagerImpl (
427
- this ,
428
- currentSpan ,
429
- tracer ,
430
- TransactionOption .combine (options , this .spanner .getOptions ().getTransactionOptions ()));
427
+ return new TransactionManagerImpl (this , currentSpan , tracer , options );
431
428
}
432
429
433
430
@ Override
434
431
public AsyncTransactionManagerImpl transactionManagerAsync (TransactionOption ... options ) {
435
- return new AsyncTransactionManagerImpl (
436
- this ,
437
- currentSpan ,
438
- TransactionOption .combine (options , this .spanner .getOptions ().getTransactionOptions ()));
432
+ return new AsyncTransactionManagerImpl (this , currentSpan , options );
439
433
}
440
434
441
435
@ Override
@@ -468,7 +462,11 @@ ApiFuture<Transaction> beginTransactionAsync(
468
462
BeginTransactionRequest .newBuilder ()
469
463
.setSession (getName ())
470
464
.setOptions (
471
- createReadWriteTransactionOptions (transactionOptions , previousTransactionId ));
465
+ defaultTransactionOptions ()
466
+ .toBuilder ()
467
+ .mergeFrom (
468
+ createReadWriteTransactionOptions (
469
+ transactionOptions , previousTransactionId )));
472
470
if (sessionReference .getIsMultiplexed () && mutation != null ) {
473
471
requestBuilder .setMutationKey (mutation );
474
472
}
@@ -513,7 +511,6 @@ TransactionContextImpl newTransaction(Options options, ByteString previousTransa
513
511
.setOptions (options )
514
512
.setTransactionId (null )
515
513
.setPreviousTransactionId (previousTransactionId )
516
- .setOptions (options )
517
514
.setTrackTransactionStarter (spanner .getOptions ().isTrackTransactionStarter ())
518
515
.setRpc (spanner .getRpc ())
519
516
.setDefaultQueryOptions (spanner .getDefaultQueryOptions (getDatabaseId ()))
0 commit comments