Skip to content

Commit a940bef

Browse files
authored
fix(spanner): multiplexed_session_previous_transaction_id is not supported in the request for a non multiplexed session (#11626)
1 parent 1898dff commit a940bef

File tree

1 file changed

+21
-14
lines changed

1 file changed

+21
-14
lines changed

spanner/transaction.go

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1538,14 +1538,19 @@ func (t *ReadWriteTransaction) setSessionEligibilityForLongRunning(sh *sessionHa
15381538
}
15391539

15401540
func beginTransaction(ctx context.Context, opts transactionBeginOptions) (transactionID, *sppb.MultiplexedSessionPrecommitToken, error) {
1541+
readWriteOptions := &sppb.TransactionOptions_ReadWrite{
1542+
ReadLockMode: opts.txOptions.ReadLockMode,
1543+
}
1544+
1545+
if opts.multiplexEnabled {
1546+
readWriteOptions.MultiplexedSessionPreviousTransactionId = opts.previousTx
1547+
}
1548+
15411549
res, err := opts.client.BeginTransaction(ctx, &sppb.BeginTransactionRequest{
15421550
Session: opts.sessionID,
15431551
Options: &sppb.TransactionOptions{
15441552
Mode: &sppb.TransactionOptions_ReadWrite_{
1545-
ReadWrite: &sppb.TransactionOptions_ReadWrite{
1546-
ReadLockMode: opts.txOptions.ReadLockMode,
1547-
MultiplexedSessionPreviousTransactionId: opts.previousTx,
1548-
},
1553+
ReadWrite: readWriteOptions,
15491554
},
15501555
ExcludeTxnFromChangeStreams: opts.txOptions.ExcludeTxnFromChangeStreams,
15511556
},
@@ -1609,11 +1614,12 @@ func (t *ReadWriteTransaction) begin(ctx context.Context, mutation *sppb.Mutatio
16091614
sh.updateLastUseTime()
16101615
}
16111616
tx, precommitToken, err = beginTransaction(contextWithOutgoingMetadata(ctx, sh.getMetadata(), t.disableRouteToLeader), transactionBeginOptions{
1612-
sessionID: sh.getID(),
1613-
client: sh.getClient(),
1614-
txOptions: t.txOpts,
1615-
mutation: mutation,
1616-
previousTx: previousTx,
1617+
multiplexEnabled: t.sp.isMultiplexedSessionForRWEnabled(),
1618+
sessionID: sh.getID(),
1619+
client: sh.getClient(),
1620+
txOptions: t.txOpts,
1621+
mutation: mutation,
1622+
previousTx: previousTx,
16171623
})
16181624
if isSessionNotFoundError(err) {
16191625
sh.destroy()
@@ -2089,9 +2095,10 @@ func isAbortedErr(err error) bool {
20892095

20902096
// transactionBeginOptions holds the parameters for beginning a transaction.
20912097
type transactionBeginOptions struct {
2092-
sessionID string
2093-
client spannerClient
2094-
txOptions TransactionOptions
2095-
previousTx transactionID
2096-
mutation *sppb.Mutation
2098+
multiplexEnabled bool
2099+
sessionID string
2100+
client spannerClient
2101+
txOptions TransactionOptions
2102+
previousTx transactionID
2103+
mutation *sppb.Mutation
20972104
}

0 commit comments

Comments
 (0)