@@ -71,7 +71,20 @@ def _make_database(name=DATABASE_NAME, database_role=None):
7171 database .log_commit_stats = False
7272 database .database_role = database_role
7373 database ._route_to_leader_enabled = True
74- database .NTH_CLIENT = AtomicCounter ()
74+ nth_client_id = AtomicCounter (1 )
75+ database .NTH_CLIENT = nth_client_id
76+ next_nth_request = AtomicCounter (1 )
77+
78+ def metadata_with_request_id (nth_request , nth_attempt , prior_metadata = []):
79+ return _metadata_with_request_id (
80+ nth_client_id .value ,
81+ 1 ,
82+ next_nth_request .increment (),
83+ nth_attempt ,
84+ prior_metadata ,
85+ )
86+
87+ database .metadata_with_request_id = metadata_with_request_id
7588 return database
7689
7790 @staticmethod
@@ -1095,6 +1108,10 @@ def unit_of_work(txn, *args, **kw):
10951108 metadata = [
10961109 ("google-cloud-resource-prefix" , database .name ),
10971110 ("x-goog-spanner-route-to-leader" , "true" ),
1111+ (
1112+ "x-goog-spanner-request-id" ,
1113+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.2.1" ,
1114+ ),
10981115 ],
10991116 )
11001117
@@ -1157,10 +1174,25 @@ def unit_of_work(txn, *args, **kw):
11571174 metadata = [
11581175 ("google-cloud-resource-prefix" , database .name ),
11591176 ("x-goog-spanner-route-to-leader" , "true" ),
1177+ (
1178+ "x-goog-spanner-request-id" ,
1179+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.2.1" ,
1180+ ),
11601181 ],
1161- )
1162- ]
1163- * 2 ,
1182+ ),
1183+ mock .call (
1184+ session = self .SESSION_NAME ,
1185+ options = expected_options ,
1186+ metadata = [
1187+ ("google-cloud-resource-prefix" , database .name ),
1188+ ("x-goog-spanner-route-to-leader" , "true" ),
1189+ (
1190+ "x-goog-spanner-request-id" ,
1191+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.2.2" ,
1192+ ),
1193+ ],
1194+ ),
1195+ ],
11641196 )
11651197 request = CommitRequest (
11661198 session = self .SESSION_NAME ,
@@ -1176,10 +1208,24 @@ def unit_of_work(txn, *args, **kw):
11761208 metadata = [
11771209 ("google-cloud-resource-prefix" , database .name ),
11781210 ("x-goog-spanner-route-to-leader" , "true" ),
1211+ (
1212+ "x-goog-spanner-request-id" ,
1213+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.3.1" ,
1214+ ),
11791215 ],
1180- )
1181- ]
1182- * 2 ,
1216+ ),
1217+ mock .call (
1218+ request = request ,
1219+ metadata = [
1220+ ("google-cloud-resource-prefix" , database .name ),
1221+ ("x-goog-spanner-route-to-leader" , "true" ),
1222+ (
1223+ "x-goog-spanner-request-id" ,
1224+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.3.2" ,
1225+ ),
1226+ ],
1227+ ),
1228+ ],
11831229 )
11841230
11851231 def test_run_in_transaction_w_abort_w_retry_metadata (self ):
@@ -1524,6 +1570,10 @@ def _time(_results=[1, 2, 4, 8]):
15241570 metadata = [
15251571 ("google-cloud-resource-prefix" , database .name ),
15261572 ("x-goog-spanner-route-to-leader" , "true" ),
1573+ (
1574+ "x-goog-spanner-request-id" ,
1575+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.2.1" ,
1576+ ),
15271577 ],
15281578 )
15291579 ]
@@ -1543,6 +1593,10 @@ def _time(_results=[1, 2, 4, 8]):
15431593 metadata = [
15441594 ("google-cloud-resource-prefix" , database .name ),
15451595 ("x-goog-spanner-route-to-leader" , "true" ),
1596+ (
1597+ "x-goog-spanner-request-id" ,
1598+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.3.1" ,
1599+ ),
15461600 ],
15471601 )
15481602 ]
@@ -1606,6 +1660,10 @@ def unit_of_work(txn, *args, **kw):
16061660 metadata = [
16071661 ("google-cloud-resource-prefix" , database .name ),
16081662 ("x-goog-spanner-route-to-leader" , "true" ),
1663+ (
1664+ "x-goog-spanner-request-id" ,
1665+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.2.1" ,
1666+ ),
16091667 ],
16101668 )
16111669 request = CommitRequest (
@@ -1620,6 +1678,10 @@ def unit_of_work(txn, *args, **kw):
16201678 metadata = [
16211679 ("google-cloud-resource-prefix" , database .name ),
16221680 ("x-goog-spanner-route-to-leader" , "true" ),
1681+ (
1682+ "x-goog-spanner-request-id" ,
1683+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.3.1" ,
1684+ ),
16231685 ],
16241686 )
16251687 database .logger .info .assert_called_once_with (
@@ -1676,6 +1738,10 @@ def unit_of_work(txn, *args, **kw):
16761738 metadata = [
16771739 ("google-cloud-resource-prefix" , database .name ),
16781740 ("x-goog-spanner-route-to-leader" , "true" ),
1741+ (
1742+ "x-goog-spanner-request-id" ,
1743+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.2.1" ,
1744+ ),
16791745 ],
16801746 )
16811747 request = CommitRequest (
@@ -1690,6 +1756,10 @@ def unit_of_work(txn, *args, **kw):
16901756 metadata = [
16911757 ("google-cloud-resource-prefix" , database .name ),
16921758 ("x-goog-spanner-route-to-leader" , "true" ),
1759+ (
1760+ "x-goog-spanner-request-id" ,
1761+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.3.1" ,
1762+ ),
16931763 ],
16941764 )
16951765 database .logger .info .assert_not_called ()
@@ -1753,6 +1823,10 @@ def unit_of_work(txn, *args, **kw):
17531823 metadata = [
17541824 ("google-cloud-resource-prefix" , database .name ),
17551825 ("x-goog-spanner-route-to-leader" , "true" ),
1826+ (
1827+ "x-goog-spanner-request-id" ,
1828+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.2.1" ,
1829+ ),
17561830 ],
17571831 )
17581832 request = CommitRequest (
@@ -1768,7 +1842,7 @@ def unit_of_work(txn, *args, **kw):
17681842 ("x-goog-spanner-route-to-leader" , "true" ),
17691843 (
17701844 "x-goog-spanner-request-id" ,
1771- f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.1 .1" ,
1845+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.3 .1" ,
17721846 ),
17731847 ],
17741848 )
@@ -1835,7 +1909,7 @@ def unit_of_work(txn, *args, **kw):
18351909 ("x-goog-spanner-route-to-leader" , "true" ),
18361910 (
18371911 "x-goog-spanner-request-id" ,
1838- f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.1 .1" ,
1912+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.2 .1" ,
18391913 ),
18401914 ],
18411915 )
@@ -1852,7 +1926,7 @@ def unit_of_work(txn, *args, **kw):
18521926 ("x-goog-spanner-route-to-leader" , "true" ),
18531927 (
18541928 "x-goog-spanner-request-id" ,
1855- f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.1 .1" ,
1929+ f"1.{ REQ_RAND_PROCESS_ID } .{ database .NTH_CLIENT .value } .1.3 .1" ,
18561930 ),
18571931 ],
18581932 )
0 commit comments