google-cloud-spanner 2.8.1 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff8ec17cc028b816dfb1ddb1255c3bd3fd6c2c66baa30b77fd27eb946b2808bd
4
- data.tar.gz: d5cd3782cb7840717fc478f882c99a1db02b5a99b72cd8fb832905e0eecbfcb0
3
+ metadata.gz: 39a33a615e75cde66aa1d0ebf4631f34d5b139fa0a5c9fe203a20a4f157c5534
4
+ data.tar.gz: 415409aa55971910e5c337a6d88a2ee0e78671a3cde9ab0ebf3170edab8151ca
5
5
  SHA512:
6
- metadata.gz: ef2ebdb0b63e720d95d661bdd8d7359d0da83448e16a098fc5f61df8068305ba02b69b47b085ed3404ab9315ce7289b5b68086a0635360f537c7c41836b5a89c
7
- data.tar.gz: 3e510b6720968f06a6faf0726afcf67d8afe113005377e4f4782a9f5ba03fda5a45cc035b9f06bfcabc3d3eca210aa00230333c8acab2e557bd2582530380566
6
+ metadata.gz: a83fc9125b21861b192099c025596c0224eb3b2d4c7904809a52062358c35d621510ef0e8d2b9ecd583609514d440e19927130fcdf56242ea2a6765a5ce83a03
7
+ data.tar.gz: 0e5a053289cb6393d62533836eda651217e60388d43931613245ac3b55ddb3d17b8c98cbb866fc0efec703bba398ccb7f18b38fb6129c11b03306bb8419f823f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Release History
2
2
 
3
+ ### 2.9.0 / 2021-07-26
4
+
5
+ #### Features
6
+
7
+ * support request tagging ([#8163](https://www.github.com/googleapis/google-cloud-ruby/issues/8163))
8
+
3
9
  ### 2.8.1 / 2021-07-08
4
10
 
5
11
  #### Documentation
@@ -236,6 +236,10 @@ module Google
236
236
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
237
237
  # `:PRIORITY_HIGH`. If priority not set then default is
238
238
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
239
+ # * `:tag` (String) A per-request tag which can be applied to
240
+ # queries or reads, used for statistics collection. Tag must be a
241
+ # valid identifier of the form: `[a-zA-Z][a-zA-Z0-9_\-]` between 2
242
+ # and 64 characters in length.
239
243
  # @param [Hash] call_options A hash of values to specify the custom
240
244
  # call options, e.g., timeout, retries, etc. Call options are
241
245
  # optional. The following settings can be provided:
@@ -403,6 +407,21 @@ module Google
403
407
  # puts "User #{row[:id]} is #{row[:name]}"
404
408
  # end
405
409
  #
410
+ # @example Query using tag for request query statistics collection.
411
+ # require "google/cloud/spanner"
412
+ #
413
+ # spanner = Google::Cloud::Spanner.new
414
+ #
415
+ # db = spanner.client "my-instance", "my-database"
416
+ #
417
+ # request_options = { tag: "Read-Users" }
418
+ # results = db.execute_query "SELECT * FROM users",
419
+ # request_options: request_options
420
+ #
421
+ # results.rows.each do |row|
422
+ # puts "User #{row[:id]} is #{row[:name]}"
423
+ # end
424
+ #
406
425
  def execute_query sql, params: nil, types: nil, single_use: nil,
407
426
  query_options: nil, request_options: nil,
408
427
  call_options: nil
@@ -410,7 +429,8 @@ module Google
410
429
  ensure_service!
411
430
 
412
431
  params, types = Convert.to_input_params_and_types params, types
413
-
432
+ request_options = Convert.to_request_options request_options,
433
+ tag_type: :request_tag
414
434
  single_use_tx = single_use_transaction single_use
415
435
  results = nil
416
436
  @pool.with_session do |session|
@@ -580,6 +600,10 @@ module Google
580
600
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
581
601
  # `:PRIORITY_HIGH`. If priority not set then default is
582
602
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
603
+ # * `:tag` (String) A per-request tag which can be applied to
604
+ # queries or reads, used for statistics collection. Tag must be a
605
+ # valid identifier of the form: `[a-zA-Z][a-zA-Z0-9_\-]` between 2
606
+ # and 64 characters in length.
583
607
  # @param [Hash] call_options A hash of values to specify the custom
584
608
  # call options, e.g., timeout, retries, etc. Call options are
585
609
  # optional. The following settings can be provided:
@@ -657,12 +681,27 @@ module Google
657
681
  # "UPDATE users SET friends = NULL WHERE active = @active",
658
682
  # params: { active: false }, request_options: request_options
659
683
  #
684
+ # @example Query using tag for request query statistics collection.
685
+ #
686
+ # require "google/cloud/spanner"
687
+ #
688
+ # spanner = Google::Cloud::Spanner.new
689
+ # db = spanner.client "my-instance", "my-database"
690
+ #
691
+ # request_options = { tag: "Update-Users" }
692
+ # row_count = db.execute_partition_update \
693
+ # "UPDATE users SET friends = NULL WHERE active = false",
694
+ # request_options: request_options
695
+ #
660
696
  def execute_partition_update sql, params: nil, types: nil,
661
697
  query_options: nil, request_options: nil,
662
698
  call_options: nil
663
699
  ensure_service!
664
700
 
665
701
  params, types = Convert.to_input_params_and_types params, types
702
+ request_options = Convert.to_request_options request_options,
703
+ tag_type: :request_tag
704
+
666
705
  results = nil
667
706
  @pool.with_session do |session|
668
707
  results = session.execute_query \
@@ -761,6 +800,10 @@ module Google
761
800
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
762
801
  # `:PRIORITY_HIGH`. If priority not set then default is
763
802
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
803
+ # * `:tag` (String) A per-request tag which can be applied to
804
+ # queries or reads, used for statistics collection. Tag must be a
805
+ # valid identifier of the form: `[a-zA-Z][a-zA-Z0-9_\-]` between 2
806
+ # and 64 characters in length.
764
807
  # @param [Hash] call_options A hash of values to specify the custom
765
808
  # call options, e.g., timeout, retries, etc. Call options are
766
809
  # optional. The following settings can be provided:
@@ -840,6 +883,22 @@ module Google
840
883
  # puts "User #{row[:id]} is #{row[:name]}"
841
884
  # end
842
885
  #
886
+ # @example Read using tag for read statistics collection.
887
+ #
888
+ # require "google/cloud/spanner"
889
+ #
890
+ # spanner = Google::Cloud::Spanner.new
891
+ #
892
+ # db = spanner.client "my-instance", "my-database"
893
+ #
894
+ # request_options = { tag: "Read-Users-All" }
895
+ # results = db.read "users", [:id, :name],
896
+ # request_options: request_options
897
+ #
898
+ # results.rows.each do |row|
899
+ # puts "User #{row[:id]} is #{row[:name]}"
900
+ # end
901
+ #
843
902
  def read table, columns, keys: nil, index: nil, limit: nil,
844
903
  single_use: nil, request_options: nil, call_options: nil
845
904
  validate_single_use_args! single_use
@@ -847,8 +906,10 @@ module Google
847
906
 
848
907
  columns = Array(columns).map(&:to_s)
849
908
  keys = Convert.to_key_set keys
850
-
851
909
  single_use_tx = single_use_transaction single_use
910
+ request_options = Convert.to_request_options request_options,
911
+ tag_type: :request_tag
912
+
852
913
  results = nil
853
914
  @pool.with_session do |session|
854
915
  results = session.read \
@@ -914,6 +975,9 @@ module Google
914
975
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
915
976
  # `:PRIORITY_HIGH`. If priority not set then default is
916
977
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
978
+ # * `:tag` (String) A tag used for statistics collection
979
+ # about transaction. A tag must be a valid identifier of the format:
980
+ # `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
917
981
  #
918
982
  # @return [Time, CommitResponse] The timestamp at which the operation
919
983
  # committed. If commit options are set it returns {CommitResponse}.
@@ -954,7 +1018,23 @@ module Google
954
1018
  # db.upsert "users", [{ id: 1, name: "Charlie", active: false }],
955
1019
  # request_options: request_options
956
1020
  #
1021
+ # @example Upsert using tag for transaction statistics collection.
1022
+ #
1023
+ # require "google/cloud/spanner"
1024
+ #
1025
+ # spanner = Google::Cloud::Spanner.new
1026
+ #
1027
+ # db = spanner.client "my-instance", "my-database"
1028
+ #
1029
+ # request_options = { tag: "Bulk-Upsert" }
1030
+ # db.upsert "users", [{ id: 1, name: "Charlie", active: false },
1031
+ # { id: 2, name: "Harvey", active: true }],
1032
+ # request_options: request_options
1033
+ #
957
1034
  def upsert table, rows, commit_options: nil, request_options: nil
1035
+ request_options = Convert.to_request_options \
1036
+ request_options, tag_type: :transaction_tag
1037
+
958
1038
  @pool.with_session do |session|
959
1039
  session.upsert table, rows, commit_options: commit_options,
960
1040
  request_options: request_options
@@ -999,7 +1079,6 @@ module Google
999
1079
  #
1000
1080
  # See [Data
1001
1081
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
1002
- #
1003
1082
  # @param [Hash] commit_options A hash of commit options.
1004
1083
  # e.g., return_commit_stats. Commit options are optional.
1005
1084
  # The following options can be provided:
@@ -1015,6 +1094,9 @@ module Google
1015
1094
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
1016
1095
  # `:PRIORITY_HIGH`. If priority not set then default is
1017
1096
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
1097
+ # * `:tag` (String) A tag used for statistics collection
1098
+ # about transaction. A tag must be a valid identifier of the
1099
+ # format: `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
1018
1100
  #
1019
1101
  # @return [Time, CommitResponse] The timestamp at which the operation
1020
1102
  # committed. If commit options are set it returns {CommitResponse}.
@@ -1055,7 +1137,23 @@ module Google
1055
1137
  # db.insert "users", [{ id: 1, name: "Charlie", active: false }],
1056
1138
  # request_options: request_options
1057
1139
  #
1140
+ # @example Insert using tag for transaction statistics collection.
1141
+ #
1142
+ # require "google/cloud/spanner"
1143
+ #
1144
+ # spanner = Google::Cloud::Spanner.new
1145
+ #
1146
+ # db = spanner.client "my-instance", "my-database"
1147
+ #
1148
+ # request_options = { tag: "BulkInsert-Users" }
1149
+ # db.insert "users", [{ id: 1, name: "Charlie", active: false },
1150
+ # { id: 2, name: "Harvey", active: true }],
1151
+ # request_options: request_options
1152
+ #
1058
1153
  def insert table, rows, commit_options: nil, request_options: nil
1154
+ request_options = Convert.to_request_options \
1155
+ request_options, tag_type: :transaction_tag
1156
+
1059
1157
  @pool.with_session do |session|
1060
1158
  session.insert table, rows, commit_options: commit_options,
1061
1159
  request_options: request_options
@@ -1099,7 +1197,6 @@ module Google
1099
1197
  #
1100
1198
  # See [Data
1101
1199
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
1102
- #
1103
1200
  # @param [Hash] commit_options A hash of commit options.
1104
1201
  # e.g., return_commit_stats. Commit options are optional.
1105
1202
  # The following options can be provided:
@@ -1115,6 +1212,9 @@ module Google
1115
1212
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
1116
1213
  # `:PRIORITY_HIGH`. If priority not set then default is
1117
1214
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
1215
+ # * `:tag` (String) A tag used for statistics collection
1216
+ # about transaction. A tag must be a valid identifier of the
1217
+ # format: `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
1118
1218
  #
1119
1219
  # @return [Time, CommitResponse] The timestamp at which the operation
1120
1220
  # committed. If commit options are set it returns {CommitResponse}.
@@ -1155,7 +1255,22 @@ module Google
1155
1255
  # db.update "users", [{ id: 1, name: "Charlie", active: false }],
1156
1256
  # request_options: request_options
1157
1257
  #
1258
+ # @example Updte using tag for transaction statistics collection.
1259
+ # require "google/cloud/spanner"
1260
+ #
1261
+ # spanner = Google::Cloud::Spanner.new
1262
+ #
1263
+ # db = spanner.client "my-instance", "my-database"
1264
+ #
1265
+ # request_options = { tag: "BulkUpdate-Users" }
1266
+ # db.update "users", [{ id: 1, name: "Charlie", active: false },
1267
+ # { id: 2, name: "Harvey", active: true }],
1268
+ # request_options: request_options
1269
+ #
1158
1270
  def update table, rows, commit_options: nil, request_options: nil
1271
+ request_options = Convert.to_request_options \
1272
+ request_options, tag_type: :transaction_tag
1273
+
1159
1274
  @pool.with_session do |session|
1160
1275
  session.update table, rows, commit_options: commit_options,
1161
1276
  request_options: request_options
@@ -1201,7 +1316,6 @@ module Google
1201
1316
  #
1202
1317
  # See [Data
1203
1318
  # types](https://cloud.google.com/spanner/docs/data-definition-language#data_types).
1204
- #
1205
1319
  # @param [Hash] commit_options A hash of commit options.
1206
1320
  # e.g., return_commit_stats. Commit options are optional.
1207
1321
  # The following options can be provided:
@@ -1217,6 +1331,9 @@ module Google
1217
1331
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
1218
1332
  # `:PRIORITY_HIGH`. If priority not set then default is
1219
1333
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
1334
+ # * `:tag` (String) A tag used for statistics collection
1335
+ # about transaction. A tag must be a valid identifier of the
1336
+ # format: `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
1220
1337
  #
1221
1338
  # @return [Time, CommitResponse] The timestamp at which the operation
1222
1339
  # committed. If commit options are set it returns {CommitResponse}.
@@ -1257,6 +1374,18 @@ module Google
1257
1374
  # db.replace "users", [{ id: 1, name: "Charlie", active: false }],
1258
1375
  # request_options: request_options
1259
1376
  #
1377
+ # @example Replace using tag for transaction statistics collection.
1378
+ # require "google/cloud/spanner"
1379
+ #
1380
+ # spanner = Google::Cloud::Spanner.new
1381
+ #
1382
+ # db = spanner.client "my-instance", "my-database"
1383
+ #
1384
+ # request_options = { tag: "BulkReplace-Users" }
1385
+ # db.replace "users", [{ id: 1, name: "Charlie", active: false },
1386
+ # { id: 2, name: "Harvey", active: true }],
1387
+ # request_options: request_options
1388
+ #
1260
1389
  def replace table, rows, commit_options: nil, request_options: nil
1261
1390
  @pool.with_session do |session|
1262
1391
  session.replace table, rows, commit_options: commit_options,
@@ -1299,6 +1428,9 @@ module Google
1299
1428
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
1300
1429
  # `:PRIORITY_HIGH`. If priority not set then default is
1301
1430
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
1431
+ # * `:tag` (String) A tag used for statistics collection
1432
+ # about transaction. A tag must be a valid identifier of the
1433
+ # format: `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
1302
1434
  # @param [Hash] call_options A hash of values to specify the custom
1303
1435
  # call options, e.g., timeout, retries, etc. Call options are
1304
1436
  # optional. The following settings can be provided:
@@ -1348,8 +1480,21 @@ module Google
1348
1480
  # request_options = { priority: :PRIORITY_MEDIUM }
1349
1481
  # db.delete "users", [1, 2, 3], request_options: request_options
1350
1482
  #
1483
+ # @example Delete using tag for transaction statistics collection.
1484
+ # require "google/cloud/spanner"
1485
+ #
1486
+ # spanner = Google::Cloud::Spanner.new
1487
+ #
1488
+ # db = spanner.client "my-instance", "my-database"
1489
+ #
1490
+ # request_options = { tag: "BulkDelete-Users" }
1491
+ # db.delete "users", [1, 2, 3], request_options: request_options
1492
+ #
1351
1493
  def delete table, keys = [], commit_options: nil, request_options: nil,
1352
1494
  call_options: nil
1495
+ request_options = Convert.to_request_options \
1496
+ request_options, tag_type: :transaction_tag
1497
+
1353
1498
  @pool.with_session do |session|
1354
1499
  session.delete table, keys, commit_options: commit_options,
1355
1500
  request_options: request_options,
@@ -1387,6 +1532,9 @@ module Google
1387
1532
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
1388
1533
  # `:PRIORITY_HIGH`. If priority not set then default is
1389
1534
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
1535
+ # * `:tag` (String) A tag used for statistics collection
1536
+ # about transaction. A tag must be a valid identifier of the
1537
+ # format: `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`.
1390
1538
  # @param [Hash] call_options A hash of values to specify the custom
1391
1539
  # call options, e.g., timeout, retries, etc. Call options are
1392
1540
  # optional. The following settings can be provided:
@@ -1447,10 +1595,26 @@ module Google
1447
1595
  # c.insert "users", [{ id: 2, name: "Harvey", active: true }]
1448
1596
  # end
1449
1597
  #
1598
+ # @example Commit using tag for transaction statistics collection.
1599
+ # require "google/cloud/spanner"
1600
+ #
1601
+ # spanner = Google::Cloud::Spanner.new
1602
+ #
1603
+ # db = spanner.client "my-instance", "my-database"
1604
+ #
1605
+ # request_options = { tag: "BulkManipulate-Users" }
1606
+ # db.commit request_options: request_options do |c|
1607
+ # c.update "users", [{ id: 1, name: "Charlie", active: false }]
1608
+ # c.insert "users", [{ id: 2, name: "Harvey", active: true }]
1609
+ # end
1610
+ #
1450
1611
  def commit commit_options: nil, request_options: nil,
1451
1612
  call_options: nil, &block
1452
1613
  raise ArgumentError, "Must provide a block" unless block_given?
1453
1614
 
1615
+ request_options = Convert.to_request_options \
1616
+ request_options, tag_type: :transaction_tag
1617
+
1454
1618
  @pool.with_session do |session|
1455
1619
  session.commit(
1456
1620
  commit_options: commit_options, request_options: request_options,
@@ -1494,6 +1658,11 @@ module Google
1494
1658
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
1495
1659
  # `:PRIORITY_HIGH`. If priority not set then default is
1496
1660
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
1661
+ # * `:tag` (String)A tag used for statistics collection
1662
+ # about transaction. The value of a transaction tag should be the
1663
+ # same for all requests belonging to the same transaction. A tag must
1664
+ # be a valid identifier of the format: `[a-zA-Z][a-zA-Z0-9_\-]{0,49}`
1665
+ #
1497
1666
  # @param [Hash] call_options A hash of values to specify the custom
1498
1667
  # call options, e.g., timeout, retries, etc. Call options are
1499
1668
  # optional. The following settings can be provided:
@@ -1585,6 +1754,30 @@ module Google
1585
1754
  # request_options: request_options
1586
1755
  # end
1587
1756
  #
1757
+ # @example Tags for request and transaction statistics collection.
1758
+ #
1759
+ # require "google/cloud/spanner"
1760
+ #
1761
+ # spanner = Google::Cloud::Spanner.new
1762
+ # db = spanner.client "my-instance", "my-database"
1763
+ #
1764
+ # # Transaction tag will be set to "Users-Txn"
1765
+ # db.transaction request_options: { tag: "Users-Txn" } do |tx|
1766
+ # # The transaction tag set as "Users-Txn"
1767
+ # # The request tag set as "Users-Txn-1"
1768
+ # request_options = { tag: "Users-Txn-1" }
1769
+ # results = tx.execute_query "SELECT * FROM users",
1770
+ # request_options: request_options
1771
+ #
1772
+ # results.rows.each do |row|
1773
+ # puts "User #{row[:id]} is #{row[:name]}"
1774
+ # end
1775
+ #
1776
+ # # The transaction tag set as "Users-Txn"
1777
+ # tx.update "users", [{ id: 1, name: "Charlie", active: false }]
1778
+ # tx.insert "users", [{ id: 2, name: "Harvey", active: true }]
1779
+ # end
1780
+ #
1588
1781
  def transaction deadline: 120, commit_options: nil,
1589
1782
  request_options: nil, call_options: nil
1590
1783
  ensure_service!
@@ -1596,39 +1789,48 @@ module Google
1596
1789
  backoff = 1.0
1597
1790
  start_time = current_time
1598
1791
 
1792
+ request_options = Convert.to_request_options \
1793
+ request_options, tag_type: :transaction_tag
1794
+
1599
1795
  @pool.with_transaction do |tx|
1600
- Thread.current[:transaction_id] = tx.transaction_id
1601
- yield tx
1602
- commit_resp = @project.service.commit \
1603
- tx.session.path, tx.mutations,
1604
- transaction_id: tx.transaction_id,
1605
- commit_options: commit_options,
1606
- request_options: request_options,
1607
- call_options: call_options
1608
- resp = CommitResponse.from_grpc commit_resp
1609
- commit_options ? resp : resp.timestamp
1610
- rescue GRPC::Aborted, Google::Cloud::AbortedError => e
1611
- # Re-raise if deadline has passed
1612
- if current_time - start_time > deadline
1613
- if e.is_a? GRPC::BadStatus
1614
- e = Google::Cloud::Error.from_error e
1796
+ if request_options
1797
+ tx.transaction_tag = request_options[:transaction_tag]
1798
+ end
1799
+
1800
+ begin
1801
+ Thread.current[:transaction_id] = tx.transaction_id
1802
+ yield tx
1803
+ commit_resp = @project.service.commit \
1804
+ tx.session.path, tx.mutations,
1805
+ transaction_id: tx.transaction_id,
1806
+ commit_options: commit_options,
1807
+ request_options: request_options,
1808
+ call_options: call_options
1809
+ resp = CommitResponse.from_grpc commit_resp
1810
+ commit_options ? resp : resp.timestamp
1811
+ rescue GRPC::Aborted, Google::Cloud::AbortedError => e
1812
+ # Re-raise if deadline has passed
1813
+ if current_time - start_time > deadline
1814
+ if e.is_a? GRPC::BadStatus
1815
+ e = Google::Cloud::Error.from_error e
1816
+ end
1817
+ raise e
1615
1818
  end
1819
+ # Sleep the amount from RetryDelay, or incremental backoff
1820
+ sleep(delay_from_aborted(e) || backoff *= 1.3)
1821
+ # Create new transaction on the session and retry the block
1822
+ tx = tx.session.create_transaction
1823
+ retry
1824
+ rescue StandardError => e
1825
+ # Rollback transaction when handling unexpected error
1826
+ tx.session.rollback tx.transaction_id
1827
+ # Return nil if raised with rollback.
1828
+ return nil if e.is_a? Rollback
1829
+ # Re-raise error.
1616
1830
  raise e
1831
+ ensure
1832
+ Thread.current[:transaction_id] = nil
1617
1833
  end
1618
- # Sleep the amount from RetryDelay, or incremental backoff
1619
- sleep(delay_from_aborted(e) || backoff *= 1.3)
1620
- # Create new transaction on the session and retry the block
1621
- tx = tx.session.create_transaction
1622
- retry
1623
- rescue StandardError => e
1624
- # Rollback transaction when handling unexpected error
1625
- tx.session.rollback tx.transaction_id
1626
- # Return nil if raised with rollback.
1627
- return nil if e.is_a? Rollback
1628
- # Re-raise error.
1629
- raise e
1630
- ensure
1631
- Thread.current[:transaction_id] = nil
1632
1834
  end
1633
1835
  end
1634
1836
 
@@ -324,6 +324,25 @@ module Google
324
324
 
325
325
  [input_params, input_param_types]
326
326
  end
327
+
328
+ ##
329
+ # Build request options by replacing tag to respecitve statistics
330
+ # collection tag type.
331
+ #
332
+ # @param [Hash] options Common request options.
333
+ # * `:tag` (String) A tag used for statistics collection.
334
+ #
335
+ # @param [Symbol] tag_type Request tag type.
336
+ # Possible values are `request_tag`, `transaction_tag`
337
+ # @return [Hash, nil]
338
+ #
339
+ def to_request_options options, tag_type: nil
340
+ return unless options
341
+
342
+ return options unless options.key? :tag
343
+
344
+ options.transform_keys { |k| k == :tag ? tag_type : k }
345
+ end
327
346
  end
328
347
 
329
348
  # rubocop:enable all
@@ -441,13 +441,18 @@ module Google
441
441
  service.rollback request, opts
442
442
  end
443
443
 
444
- def begin_transaction session_name, call_options: nil
444
+ def begin_transaction session_name, request_options: nil,
445
+ call_options: nil
445
446
  tx_opts = V1::TransactionOptions.new(
446
447
  read_write: V1::TransactionOptions::ReadWrite.new
447
448
  )
448
449
  opts = default_options session_name: session_name,
449
450
  call_options: call_options
450
- request = { session: session_name, options: tx_opts }
451
+ request = {
452
+ session: session_name,
453
+ options: tx_opts,
454
+ request_options: request_options
455
+ }
451
456
  service.begin_transaction request, opts
452
457
  end
453
458
 
@@ -167,6 +167,23 @@ module Google
167
167
  # available optimizer version.
168
168
  # * `:optimizer_statistics_package` (String) Statistics package to
169
169
  # use. Empty to use the database default.
170
+ # @param [Hash] request_options Common request options.
171
+ #
172
+ # * `:request_tag` (String) A per-request tag which can be applied
173
+ # to queries or reads, used for statistics collection. Both
174
+ # request_tag and transaction_tag can be specified for a read or
175
+ # query that belongs to a transaction. This field is ignored for
176
+ # requests where it's not applicable (e.g. CommitRequest).
177
+ # `request_tag` must be a valid identifier of the form:
178
+ # `[a-zA-Z][a-zA-Z0-9_\-]` between 2 and 64 characters in length.
179
+ # * `:transaction_tag` (String) A tag used for statistics collection
180
+ # about this transaction. Both request_tag and transaction_tag can
181
+ # be specified for a read or query that belongs to a transaction.
182
+ # The value of transaction_tag should be the same for all requests
183
+ # belonging to the same transaction. If this request doesn't belong
184
+ # to any transaction, transaction_tag will be ignored.
185
+ # `transaction_tag` must be a valid identifier of the format:
186
+ # [a-zA-Z][a-zA-Z0-9_\-]{0,49}
170
187
  # @param [Hash] call_options A hash of values to specify the custom
171
188
  # call options, e.g., timeout, retries, etc. Call options are
172
189
  # optional. The following settings can be provided:
@@ -349,6 +366,23 @@ module Google
349
366
  # transactions.
350
367
  # @param [Integer] seqno A per-transaction sequence number used to
351
368
  # identify this request.
369
+ # @param [Hash] request_options Common request options.
370
+ #
371
+ # * `:request_tag` (String) A per-request tag which can be applied
372
+ # to queries or reads, used for statistics collection. Both
373
+ # request_tag and transaction_tag can be specified for a read or
374
+ # query that belongs to a transaction. This field is ignored for
375
+ # requests where it's not applicable (e.g. CommitRequest).
376
+ # `request_tag` must be a valid identifier of the form:
377
+ # `[a-zA-Z][a-zA-Z0-9_\-]` between 2 and 64 characters in length.
378
+ # * `:transaction_tag` (String) A tag used for statistics collection
379
+ # about this transaction. Both request_tag and transaction_tag can
380
+ # be specified for a read or query that belongs to a transaction.
381
+ # The value of transaction_tag should be the same for all requests
382
+ # belonging to the same transaction. If this request doesn't belong
383
+ # to any transaction, transaction_tag will be ignored.
384
+ # `transaction_tag` must be a valid identifier of the format:
385
+ # [a-zA-Z][a-zA-Z0-9_\-]{0,49}
352
386
  # @param [Hash] call_options A hash of values to specify the custom
353
387
  # call options, e.g., timeout, retries, etc. Call options are
354
388
  # optional. The following settings can be provided:
@@ -413,6 +447,23 @@ module Google
413
447
  # @param [Google::Cloud::Spanner::V1::TransactionSelector] transaction The
414
448
  # transaction selector value to send. Only used for single-use
415
449
  # transactions.
450
+ # @param [Hash] request_options Common request options.
451
+ #
452
+ # * `:request_tag` (String) A per-request tag which can be applied
453
+ # to queries or reads, used for statistics collection. Both
454
+ # request_tag and transaction_tag can be specified for a read or
455
+ # query that belongs to a transaction. This field is ignored for
456
+ # requests where it's not applicable (e.g. CommitRequest).
457
+ # `request_tag` must be a valid identifier of the form:
458
+ # `[a-zA-Z][a-zA-Z0-9_\-]` between 2 and 64 characters in length.
459
+ # * `:transaction_tag` (String) A tag used for statistics collection
460
+ # about this transaction. Both request_tag and transaction_tag can
461
+ # be specified for a read or query that belongs to a transaction.
462
+ # The value of transaction_tag should be the same for all requests
463
+ # belonging to the same transaction. If this request doesn't belong
464
+ # to any transaction, transaction_tag will be ignored.
465
+ # `transaction_tag` must be a valid identifier of the format:
466
+ # [a-zA-Z][a-zA-Z0-9_\-]{0,49}
416
467
  # @param [Hash] call_options A hash of values to specify the custom
417
468
  # call options, e.g., timeout, retries, etc. Call options are
418
469
  # optional. The following settings can be provided:
@@ -506,6 +557,23 @@ module Google
506
557
  # {CommitResponse}. Default value is `false`
507
558
  #
508
559
  # transaction. Default it is `false`.
560
+ # @param [Hash] request_options Common request options.
561
+ #
562
+ # * `:request_tag` (String) A per-request tag which can be applied
563
+ # to queries or reads, used for statistics collection. Both
564
+ # request_tag and transaction_tag can be specified for a read or
565
+ # query that belongs to a transaction. This field is ignored for
566
+ # requests where it's not applicable (e.g. CommitRequest).
567
+ # `request_tag` must be a valid identifier of the form:
568
+ # `[a-zA-Z][a-zA-Z0-9_\-]` between 2 and 64 characters in length.
569
+ # * `:transaction_tag` (String) A tag used for statistics collection
570
+ # about this transaction. Both request_tag and transaction_tag can
571
+ # be specified for a read or query that belongs to a transaction.
572
+ # The value of transaction_tag should be the same for all requests
573
+ # belonging to the same transaction. If this request doesn't belong
574
+ # to any transaction, transaction_tag will be ignored.
575
+ # `transaction_tag` must be a valid identifier of the format:
576
+ # [a-zA-Z][a-zA-Z0-9_\-]{0,49}
509
577
  # @param [Hash] call_options A hash of values to specify the custom
510
578
  # call options, e.g., timeout, retries, etc. Call options are
511
579
  # optional. The following settings can be provided:
@@ -605,6 +673,23 @@ module Google
605
673
  # then statistics related to the transaction will be included in
606
674
  # {CommitResponse}. Default value is `false`
607
675
  #
676
+ # @param [Hash] request_options Common request options.
677
+ #
678
+ # * `:request_tag` (String) A per-request tag which can be applied
679
+ # to queries or reads, used for statistics collection. Both
680
+ # request_tag and transaction_tag can be specified for a read or
681
+ # query that belongs to a transaction. This field is ignored for
682
+ # requests where it's not applicable (e.g. CommitRequest).
683
+ # `request_tag` must be a valid identifier of the form:
684
+ # `[a-zA-Z][a-zA-Z0-9_\-]` between 2 and 64 characters in length.
685
+ # * `:transaction_tag` (String) A tag used for statistics collection
686
+ # about this transaction. Both request_tag and transaction_tag can
687
+ # be specified for a read or query that belongs to a transaction.
688
+ # The value of transaction_tag should be the same for all requests
689
+ # belonging to the same transaction. If this request doesn't belong
690
+ # to any transaction, transaction_tag will be ignored.
691
+ # `transaction_tag` must be a valid identifier of the format:
692
+ # [a-zA-Z][a-zA-Z0-9_\-]{0,49}
608
693
  # @param [Hash] call_options A hash of values to specify the custom
609
694
  # call options, e.g., timeout, retries, etc. Call options are
610
695
  # optional. The following settings can be provided:
@@ -696,6 +781,23 @@ module Google
696
781
  # then statistics related to the transaction will be included in
697
782
  # {CommitResponse}. Default value is `false`
698
783
  #
784
+ # @param [Hash] request_options Common request options.
785
+ #
786
+ # * `:request_tag` (String) A per-request tag which can be applied
787
+ # to queries or reads, used for statistics collection. Both
788
+ # request_tag and transaction_tag can be specified for a read or
789
+ # query that belongs to a transaction. This field is ignored for
790
+ # requests where it's not applicable (e.g. CommitRequest).
791
+ # `request_tag` must be a valid identifier of the form:
792
+ # `[a-zA-Z][a-zA-Z0-9_\-]` between 2 and 64 characters in length.
793
+ # * `:transaction_tag` (String) A tag used for statistics collection
794
+ # about this transaction. Both request_tag and transaction_tag can
795
+ # be specified for a read or query that belongs to a transaction.
796
+ # The value of transaction_tag should be the same for all requests
797
+ # belonging to the same transaction. If this request doesn't belong
798
+ # to any transaction, transaction_tag will be ignored.
799
+ # `transaction_tag` must be a valid identifier of the format:
800
+ # [a-zA-Z][a-zA-Z0-9_\-]{0,49}
699
801
  # @param [Hash] call_options A hash of values to specify the custom
700
802
  # call options, e.g., timeout, retries, etc. Call options are
701
803
  # optional. The following settings can be provided:
@@ -786,6 +888,23 @@ module Google
786
888
  # then statistics related to the transaction will be included in
787
889
  # {CommitResponse}. Default value is `false`
788
890
  #
891
+ # @param [Hash] request_options Common request options.
892
+ #
893
+ # * `:request_tag` (String) A per-request tag which can be applied
894
+ # to queries or reads, used for statistics collection. Both
895
+ # request_tag and transaction_tag can be specified for a read or
896
+ # query that belongs to a transaction. This field is ignored for
897
+ # requests where it's not applicable (e.g. CommitRequest).
898
+ # `request_tag` must be a valid identifier of the form:
899
+ # `[a-zA-Z][a-zA-Z0-9_\-]` between 2 and 64 characters in length.
900
+ # * `:transaction_tag` (String) A tag used for statistics collection
901
+ # about this transaction. Both request_tag and transaction_tag can
902
+ # be specified for a read or query that belongs to a transaction.
903
+ # The value of transaction_tag should be the same for all requests
904
+ # belonging to the same transaction. If this request doesn't belong
905
+ # to any transaction, transaction_tag will be ignored.
906
+ # `transaction_tag` must be a valid identifier of the format:
907
+ # [a-zA-Z][a-zA-Z0-9_\-]{0,49}
789
908
  # @param [Hash] call_options A hash of values to specify the custom
790
909
  # call options, e.g., timeout, retries, etc. Call options are
791
910
  # optional. The following settings can be provided:
@@ -878,6 +997,23 @@ module Google
878
997
  # then statistics related to the transaction will be included in
879
998
  # {CommitResponse}. Default value is `false`.
880
999
  #
1000
+ # @param [Hash] request_options Common request options.
1001
+ #
1002
+ # * `:request_tag` (String) A per-request tag which can be applied
1003
+ # to queries or reads, used for statistics collection. Both
1004
+ # request_tag and transaction_tag can be specified for a read or
1005
+ # query that belongs to a transaction. This field is ignored for
1006
+ # requests where it's not applicable (e.g. CommitRequest).
1007
+ # `request_tag` must be a valid identifier of the form:
1008
+ # `[a-zA-Z][a-zA-Z0-9_\-]` between 2 and 64 characters in length.
1009
+ # * `:transaction_tag` (String) A tag used for statistics collection
1010
+ # about this transaction. Both request_tag and transaction_tag can
1011
+ # be specified for a read or query that belongs to a transaction.
1012
+ # The value of transaction_tag should be the same for all requests
1013
+ # belonging to the same transaction. If this request doesn't belong
1014
+ # to any transaction, transaction_tag will be ignored.
1015
+ # `transaction_tag` must be a valid identifier of the format:
1016
+ # [a-zA-Z][a-zA-Z0-9_\-]{0,49}
881
1017
  # @param [Hash] call_options A hash of values to specify the custom
882
1018
  # call options, e.g., timeout, retries, etc. Call options are
883
1019
  # optional. The following settings can be provided:
@@ -950,6 +1086,23 @@ module Google
950
1086
  # then statistics related to the transaction will be included in
951
1087
  # {CommitResponse}. Default value is `false`
952
1088
  #
1089
+ # @param [Hash] request_options Common request options.
1090
+ #
1091
+ # * `:request_tag` (String) A per-request tag which can be applied
1092
+ # to queries or reads, used for statistics collection. Both
1093
+ # request_tag and transaction_tag can be specified for a read or
1094
+ # query that belongs to a transaction. This field is ignored for
1095
+ # requests where it's not applicable (e.g. CommitRequest).
1096
+ # `request_tag` must be a valid identifier of the form:
1097
+ # `[a-zA-Z][a-zA-Z0-9_\-]` between 2 and 64 characters in length.
1098
+ # * `:transaction_tag` (String) A tag used for statistics collection
1099
+ # about this transaction. Both request_tag and transaction_tag can
1100
+ # be specified for a read or query that belongs to a transaction.
1101
+ # The value of transaction_tag should be the same for all requests
1102
+ # belonging to the same transaction. If this request doesn't belong
1103
+ # to any transaction, transaction_tag will be ignored.
1104
+ # `transaction_tag` must be a valid identifier of the format:
1105
+ # [a-zA-Z][a-zA-Z0-9_\-]{0,49}
953
1106
  # @param [Hash] call_options A hash of values to specify the custom
954
1107
  # call options, e.g., timeout, retries, etc. Call options are
955
1108
  # optional. The following settings can be provided:
@@ -77,6 +77,9 @@ module Google
77
77
  # @private The Session object.
78
78
  attr_accessor :session
79
79
 
80
+ # @private Transaction tag for statistics collection.
81
+ attr_accessor :transaction_tag
82
+
80
83
  def initialize
81
84
  @commit = Commit.new
82
85
  @seqno = 0
@@ -167,6 +170,10 @@ module Google
167
170
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
168
171
  # `:PRIORITY_HIGH`. If priority not set then default is
169
172
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
173
+ # * `:tag` (String) A per-request tag which can be applied to
174
+ # queries or reads, used for statistics collection. Tag must be a
175
+ # valid identifier of the form: `[a-zA-Z][a-zA-Z0-9_\-]` between 2
176
+ # and 64 characters in length.
170
177
  # @param [Hash] call_options A hash of values to specify the custom
171
178
  # call options, e.g., timeout, retries, etc. Call options are
172
179
  # optional. The following settings can be provided:
@@ -333,6 +340,7 @@ module Google
333
340
  @seqno += 1
334
341
 
335
342
  params, types = Convert.to_input_params_and_types params, types
343
+ request_options = build_request_options request_options
336
344
  session.execute_query sql, params: params, types: types,
337
345
  transaction: tx_selector, seqno: @seqno,
338
346
  query_options: query_options,
@@ -419,6 +427,10 @@ module Google
419
427
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
420
428
  # `:PRIORITY_HIGH`. If priority not set then default is
421
429
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
430
+ # * `:tag` (String) A per-request tag which can be applied to
431
+ # queries or reads, used for statistics collection. Tag must be a
432
+ # valid identifier of the form: `[a-zA-Z][a-zA-Z0-9_\-]` between 2
433
+ # and 64 characters in length.
422
434
  # @param [Hash] call_options A hash of values to specify the custom
423
435
  # call options, e.g., timeout, retries, etc. Call options are
424
436
  # optional. The following settings can be provided:
@@ -525,6 +537,10 @@ module Google
525
537
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
526
538
  # `:PRIORITY_HIGH`. If priority not set then default is
527
539
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
540
+ # * `:tag` (String) A per-request tag which can be applied to
541
+ # queries or reads, used for statistics collection. Tag must be a
542
+ # valid identifier of the form: `[a-zA-Z][a-zA-Z0-9_\-]` between 2
543
+ # and 64 characters in length.
528
544
  # @param [Hash] call_options A hash of values to specify the custom
529
545
  # call options, e.g., timeout, retries, etc. Call options are
530
546
  # optional. The following settings can be provided:
@@ -597,6 +613,8 @@ module Google
597
613
  def batch_update request_options: nil, call_options: nil, &block
598
614
  ensure_session!
599
615
  @seqno += 1
616
+
617
+ request_options = build_request_options request_options
600
618
  session.batch_update tx_selector, @seqno,
601
619
  request_options: request_options,
602
620
  call_options: call_options, &block
@@ -626,6 +644,10 @@ module Google
626
644
  # Valid values are `:PRIORITY_LOW`, `:PRIORITY_MEDIUM`,
627
645
  # `:PRIORITY_HIGH`. If priority not set then default is
628
646
  # `PRIORITY_UNSPECIFIED` is equivalent to `:PRIORITY_HIGH`.
647
+ # * `:tag` (String) A per-request tag which can be applied to
648
+ # queries or reads, used for statistics collection. Tag must be a
649
+ # valid identifier of the form: `[a-zA-Z][a-zA-Z0-9_\-]` between 2
650
+ # and 64 characters in length.
629
651
  # @param [Hash] call_options A hash of values to specify the custom
630
652
  # call options, e.g., timeout, retries, etc. Call options are
631
653
  # optional. The following settings can be provided:
@@ -663,7 +685,7 @@ module Google
663
685
 
664
686
  columns = Array(columns).map(&:to_s)
665
687
  keys = Convert.to_key_set keys
666
-
688
+ request_options = build_request_options request_options
667
689
  session.read table, columns, keys: keys, index: index, limit: limit,
668
690
  transaction: tx_selector,
669
691
  request_options: request_options,
@@ -1097,6 +1119,20 @@ module Google
1097
1119
  V1::TransactionSelector.new id: transaction_id
1098
1120
  end
1099
1121
 
1122
+ ##
1123
+ # @private Build request options. If transaction tag is set
1124
+ # then add into request options.
1125
+ def build_request_options options
1126
+ options = Convert.to_request_options options, tag_type: :request_tag
1127
+
1128
+ if transaction_tag
1129
+ options ||= {}
1130
+ options[:transaction_tag] = transaction_tag
1131
+ end
1132
+
1133
+ options
1134
+ end
1135
+
1100
1136
  ##
1101
1137
  # @private Raise an error unless an active connection to the service is
1102
1138
  # available.
@@ -16,7 +16,7 @@
16
16
  module Google
17
17
  module Cloud
18
18
  module Spanner
19
- VERSION = "2.8.1".freeze
19
+ VERSION = "2.9.0".freeze
20
20
  end
21
21
  end
22
22
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: google-cloud-spanner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Moore
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-07-08 00:00:00.000000000 Z
12
+ date: 2021-07-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: google-cloud-core