2121from google .cloud .spanner_v1 import TypeCode
2222from google .api_core .retry import Retry
2323from google .api_core import gapic_v1
24+ from google .cloud .spanner_v1 ._helpers import (
25+ AtomicCounter ,
26+ _metadata_with_request_id ,
27+ )
28+ from google .cloud .spanner_v1 .request_id_header import REQ_RAND_PROCESS_ID
2429
2530from tests ._helpers import (
2631 HAS_OPENTELEMETRY_INSTALLED ,
@@ -197,6 +202,10 @@ def test_begin_ok(self):
197202 [
198203 ("google-cloud-resource-prefix" , database .name ),
199204 ("x-goog-spanner-route-to-leader" , "true" ),
205+ (
206+ "x-goog-spanner-request-id" ,
207+ f"1.{ REQ_RAND_PROCESS_ID } .{ _Client .NTH_CLIENT .value } .1.1.1" ,
208+ ),
200209 ],
201210 )
202211
@@ -301,6 +310,10 @@ def test_rollback_ok(self):
301310 [
302311 ("google-cloud-resource-prefix" , database .name ),
303312 ("x-goog-spanner-route-to-leader" , "true" ),
313+ (
314+ "x-goog-spanner-request-id" ,
315+ f"1.{ REQ_RAND_PROCESS_ID } .{ _Client .NTH_CLIENT .value } .1.1.1" ,
316+ ),
304317 ],
305318 )
306319
@@ -492,6 +505,10 @@ def _commit_helper(
492505 [
493506 ("google-cloud-resource-prefix" , database .name ),
494507 ("x-goog-spanner-route-to-leader" , "true" ),
508+ (
509+ "x-goog-spanner-request-id" ,
510+ f"1.{ REQ_RAND_PROCESS_ID } .{ _Client .NTH_CLIENT .value } .1.1.1" ,
511+ ),
495512 ],
496513 )
497514 self .assertEqual (actual_request_options , expected_request_options )
@@ -666,6 +683,10 @@ def _execute_update_helper(
666683 metadata = [
667684 ("google-cloud-resource-prefix" , database .name ),
668685 ("x-goog-spanner-route-to-leader" , "true" ),
686+ (
687+ "x-goog-spanner-request-id" ,
688+ f"1.{ REQ_RAND_PROCESS_ID } .{ _Client .NTH_CLIENT .value } .1.1.1" ,
689+ ),
669690 ],
670691 )
671692
@@ -859,6 +880,10 @@ def _batch_update_helper(
859880 metadata = [
860881 ("google-cloud-resource-prefix" , database .name ),
861882 ("x-goog-spanner-route-to-leader" , "true" ),
883+ (
884+ "x-goog-spanner-request-id" ,
885+ f"1.{ REQ_RAND_PROCESS_ID } .{ _Client .NTH_CLIENT .value } .1.1.1" ,
886+ ),
862887 ],
863888 retry = retry ,
864889 timeout = timeout ,
@@ -974,6 +999,10 @@ def test_context_mgr_success(self):
974999 [
9751000 ("google-cloud-resource-prefix" , database .name ),
9761001 ("x-goog-spanner-route-to-leader" , "true" ),
1002+ (
1003+ "x-goog-spanner-request-id" ,
1004+ f"1.{ REQ_RAND_PROCESS_ID } .{ _Client .NTH_CLIENT .value } .1.2.1" ,
1005+ ),
9771006 ],
9781007 )
9791008
@@ -1004,11 +1033,19 @@ def test_context_mgr_failure(self):
10041033
10051034
10061035class _Client (object ):
1036+ NTH_CLIENT = AtomicCounter ()
1037+
10071038 def __init__ (self ):
10081039 from google .cloud .spanner_v1 import ExecuteSqlRequest
10091040
10101041 self ._query_options = ExecuteSqlRequest .QueryOptions (optimizer_version = "1" )
10111042 self .directed_read_options = None
1043+ self ._nth_client_id = _Client .NTH_CLIENT .increment ()
1044+ self ._nth_request = AtomicCounter ()
1045+
1046+ @property
1047+ def _next_nth_request (self ):
1048+ return self ._nth_request .increment ()
10121049
10131050
10141051class _Instance (object ):
@@ -1024,6 +1061,27 @@ def __init__(self):
10241061 self ._directed_read_options = None
10251062 self .default_transaction_options = DefaultTransactionOptions ()
10261063
1064+ @property
1065+ def _next_nth_request (self ):
1066+ return self ._instance ._client ._next_nth_request
1067+
1068+ @property
1069+ def _nth_client_id (self ):
1070+ return self ._instance ._client ._nth_client_id
1071+
1072+ def metadata_with_request_id (self , nth_request , nth_attempt , prior_metadata = []):
1073+ return _metadata_with_request_id (
1074+ self ._nth_client_id ,
1075+ self ._channel_id ,
1076+ nth_request ,
1077+ nth_attempt ,
1078+ prior_metadata ,
1079+ )
1080+
1081+ @property
1082+ def _channel_id (self ):
1083+ return 1
1084+
10271085
10281086class _Session (object ):
10291087 _transaction = None
0 commit comments