@@ -133,6 +133,8 @@ def _restart_on_unavailable(
133133 # Update the transaction from the response.
134134 if transaction is not None :
135135 transaction ._update_for_result_set_pb (item )
136+ if item .precommit_token is not None and transaction is not None :
137+ transaction ._update_for_precommit_token_pb (item .precommit_token )
136138
137139 if item .resume_token :
138140 resume_token = item .resume_token
@@ -1013,9 +1015,6 @@ def _update_for_result_set_pb(
10131015 if result_set_pb .metadata and result_set_pb .metadata .transaction :
10141016 self ._update_for_transaction_pb (result_set_pb .metadata .transaction )
10151017
1016- if result_set_pb .precommit_token :
1017- self ._update_for_precommit_token_pb (result_set_pb .precommit_token )
1018-
10191018 def _update_for_transaction_pb (self , transaction_pb : Transaction ) -> None :
10201019 """Updates the snapshot for the given transaction.
10211020
@@ -1031,7 +1030,7 @@ def _update_for_transaction_pb(self, transaction_pb: Transaction) -> None:
10311030 self ._transaction_id = transaction_pb .id
10321031
10331032 if transaction_pb .precommit_token :
1034- self ._update_for_precommit_token_pb (transaction_pb .precommit_token )
1033+ self ._update_for_precommit_token_pb_unsafe (transaction_pb .precommit_token )
10351034
10361035 def _update_for_precommit_token_pb (
10371036 self , precommit_token_pb : MultiplexedSessionPrecommitToken
@@ -1044,10 +1043,22 @@ def _update_for_precommit_token_pb(
10441043 # Because multiple threads can be used to perform operations within a
10451044 # transaction, we need to use a lock when updating the precommit token.
10461045 with self ._lock :
1047- if self ._precommit_token is None or (
1048- precommit_token_pb .seq_num > self ._precommit_token .seq_num
1049- ):
1050- self ._precommit_token = precommit_token_pb
1046+ self ._update_for_precommit_token_pb_unsafe (precommit_token_pb )
1047+
1048+ def _update_for_precommit_token_pb_unsafe (
1049+ self , precommit_token_pb : MultiplexedSessionPrecommitToken
1050+ ) -> None :
1051+ """Updates the snapshot for the given multiplexed session precommit token.
1052+ This method is unsafe because it does not acquire a lock before updating
1053+ the precommit token. It should only be used when the caller has already
1054+ acquired the lock.
1055+ :type precommit_token_pb: :class:`~google.cloud.spanner_v1.MultiplexedSessionPrecommitToken`
1056+ :param precommit_token_pb: The multiplexed session precommit token to update the snapshot with.
1057+ """
1058+ if self ._precommit_token is None or (
1059+ precommit_token_pb .seq_num > self ._precommit_token .seq_num
1060+ ):
1061+ self ._precommit_token = precommit_token_pb
10511062
10521063
10531064class Snapshot (_SnapshotBase ):
0 commit comments