3030import com .google .cloud .spanner .Options .TransactionOption ;
3131import com .google .cloud .spanner .Options .UpdateOption ;
3232import com .google .cloud .spanner .SessionClient .SessionOption ;
33+ import com .google .cloud .spanner .SpannerOptions .Builder .TransactionOptions ;
3334import com .google .cloud .spanner .TransactionRunnerImpl .TransactionContextImpl ;
3435import com .google .cloud .spanner .spi .v1 .SpannerRpc ;
3536import com .google .common .base .Ticker ;
4445import com .google .spanner .v1 .CommitRequest ;
4546import com .google .spanner .v1 .RequestOptions ;
4647import com .google .spanner .v1 .Transaction ;
47- import com .google .spanner .v1 .TransactionOptions ;
4848import java .time .Instant ;
4949import java .util .ArrayList ;
5050import java .util .Collection ;
@@ -69,15 +69,18 @@ static void throwIfTransactionsPending() {
6969 }
7070 }
7171
72- static TransactionOptions createReadWriteTransactionOptions (
72+ static com . google . spanner . v1 . TransactionOptions createReadWriteTransactionOptions (
7373 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 ();
7576 if (options .withExcludeTxnFromChangeStreams () == Boolean .TRUE ) {
7677 transactionOptions .setExcludeTxnFromChangeStreams (true );
7778 }
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 ();
7981 if (options .withOptimisticLock () == Boolean .TRUE ) {
80- readWrite .setReadLockMode (TransactionOptions .ReadWrite .ReadLockMode .OPTIMISTIC );
82+ readWrite .setReadLockMode (
83+ com .google .spanner .v1 .TransactionOptions .ReadWrite .ReadLockMode .OPTIMISTIC );
8184 }
8285 if (previousTransactionId != null
8386 && previousTransactionId != com .google .protobuf .ByteString .EMPTY ) {
@@ -196,6 +199,14 @@ void markUsed(Instant instant) {
196199 sessionReference .markUsed (instant );
197200 }
198201
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+
199210 public DatabaseId getDatabaseId () {
200211 return sessionReference .getDatabaseId ();
201212 }
@@ -242,26 +253,24 @@ public CommitResponse writeAtLeastOnceWithOptions(
242253 setActive (null );
243254 List <com .google .spanner .v1 .Mutation > mutationsProto = new ArrayList <>();
244255 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 );
249257 final CommitRequest .Builder requestBuilder =
250258 CommitRequest .newBuilder ()
251259 .setSession (getName ())
252260 .setReturnCommitStats (options .withCommitStats ())
253261 .addAllMutations (mutationsProto );
254262
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 ());
258266 if (options .withExcludeTxnFromChangeStreams () == Boolean .TRUE ) {
259267 transactionOptionsBuilder .setExcludeTxnFromChangeStreams (true );
260268 }
261269 if (options .isolationLevel () != null ) {
262270 transactionOptionsBuilder .setIsolationLevel (options .isolationLevel ());
263271 }
264- requestBuilder .setSingleUseTransaction (transactionOptionsBuilder );
272+ requestBuilder .setSingleUseTransaction (
273+ this .defaultTransactionOptions ().toBuilder ().mergeFrom (transactionOptionsBuilder .build ()));
265274
266275 if (options .hasMaxCommitDelay ()) {
267276 requestBuilder .setMaxCommitDelay (
@@ -405,37 +414,22 @@ public ReadOnlyTransaction readOnlyTransaction(TimestampBound bound) {
405414
406415 @ Override
407416 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 ));
412418 }
413419
414420 @ Override
415421 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 )));
422423 }
423424
424425 @ Override
425426 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 );
431428 }
432429
433430 @ Override
434431 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 );
439433 }
440434
441435 @ Override
@@ -468,7 +462,11 @@ ApiFuture<Transaction> beginTransactionAsync(
468462 BeginTransactionRequest .newBuilder ()
469463 .setSession (getName ())
470464 .setOptions (
471- createReadWriteTransactionOptions (transactionOptions , previousTransactionId ));
465+ defaultTransactionOptions ()
466+ .toBuilder ()
467+ .mergeFrom (
468+ createReadWriteTransactionOptions (
469+ transactionOptions , previousTransactionId )));
472470 if (sessionReference .getIsMultiplexed () && mutation != null ) {
473471 requestBuilder .setMutationKey (mutation );
474472 }
@@ -513,7 +511,6 @@ TransactionContextImpl newTransaction(Options options, ByteString previousTransa
513511 .setOptions (options )
514512 .setTransactionId (null )
515513 .setPreviousTransactionId (previousTransactionId )
516- .setOptions (options )
517514 .setTrackTransactionStarter (spanner .getOptions ().isTrackTransactionStarter ())
518515 .setRpc (spanner .getRpc ())
519516 .setDefaultQueryOptions (spanner .getDefaultQueryOptions (getDatabaseId ()))
0 commit comments