google-cloud-spanner 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49b3d879f62998284edf63a941432c67a8caebf708f2ef4df883a3f336dbc758
4
- data.tar.gz: e6768ee6037df38c765f888f64a4b29cc192b8a30a1bbcf02d01240c3c228621
3
+ metadata.gz: d7eb1575c3244eb459d8379345e2dea6f19c925bbeb526ff969aa07a34428c94
4
+ data.tar.gz: 9c8c0b2d99074ec99ff38125ccbf89713f0d7c5441445650b96b5a969b09629a
5
5
  SHA512:
6
- metadata.gz: 3c456f4ee2482f6b0c488c749f11b508092b9c2a9befe8a4c44c74d6321c3dc1be43a6abd4cfec56c1ca7d2312feb79998383537ebd20bbe6f3d0be10f6cf576
7
- data.tar.gz: b31fad2484409183d77bb00e11ba3526fdb9d5ae6817e8a95af51f61e09d7d3635ac7e58c99fbbb4b862b49a3092d59f7e88505aa86cb509ab1d23447ebfb060
6
+ metadata.gz: ba900cc5a539d55baead3d8825472b05b40ab19adc3062dfb93c7cf1713805b9619c2cbd7b115f3e2e61f79371e4c53eb8a225f8cd1f7a3dc1c30f72e1590cc7
7
+ data.tar.gz: 1639fd79b6bd30af238b2d002852bec94e4f29aa581594758169180e15e6b335f86c5a6cac1fa9a13a7fef02edc105ea46eb4867a02c59bf0a069c142d8799e2
@@ -1,5 +1,11 @@
1
1
  # Release History
2
2
 
3
+ ### 2.1.0 / 2020-08-05
4
+
5
+ #### Features
6
+
7
+ * Support custom setting of timeout and retry
8
+
3
9
  ### 2.0.0 / 2020-07-23
4
10
 
5
11
  This is a major update that removes the "low-level" client interface code, and
@@ -173,6 +173,19 @@ module Google
173
173
  # * `:optimizer_version` (String) The version of optimizer to use.
174
174
  # Empty to use database default. "latest" to use the latest
175
175
  # available optimizer version.
176
+ # @param [Hash] call_options A hash of values to specify the custom
177
+ # call options, e.g., timeout, retries, etc. Call options are
178
+ # optional. The following settings can be provided:
179
+ #
180
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
181
+ # that overrides the default setting.
182
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
183
+ # setting of retry policy with the following keys:
184
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
185
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
186
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
187
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
188
+ # trigger a retry.
176
189
  #
177
190
  # @return [Array<Google::Cloud::Spanner::Partition>] The partitions
178
191
  # created by the query partition.
@@ -196,7 +209,7 @@ module Google
196
209
  #
197
210
  def partition_query sql, params: nil, types: nil,
198
211
  partition_size_bytes: nil, max_partitions: nil,
199
- query_options: nil
212
+ query_options: nil, call_options: nil
200
213
  ensure_session!
201
214
 
202
215
  params, types = Convert.to_input_params_and_types params, types
@@ -204,7 +217,8 @@ module Google
204
217
  results = session.partition_query \
205
218
  sql, tx_selector, params: params, types: types,
206
219
  partition_size_bytes: partition_size_bytes,
207
- max_partitions: max_partitions
220
+ max_partitions: max_partitions,
221
+ call_options: call_options
208
222
  results.partitions.map do |grpc|
209
223
  # Convert partition protos to execute sql request protos
210
224
  execute_sql_grpc = V1::ExecuteSqlRequest.new(
@@ -248,6 +262,19 @@ module Google
248
262
  # partitions to return. For example, this may be set to the number of
249
263
  # workers available. This is only a hint and may provide different
250
264
  # results based on the request.
265
+ # @param [Hash] call_options A hash of values to specify the custom
266
+ # call options, e.g., timeout, retries, etc. Call options are
267
+ # optional. The following settings can be provided:
268
+ #
269
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
270
+ # that overrides the default setting.
271
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
272
+ # setting of retry policy with the following keys:
273
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
274
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
275
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
276
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
277
+ # trigger a retry.
251
278
  #
252
279
  # @return [Array<Google::Cloud::Spanner::Partition>] The partitions
253
280
  # created by the read partition.
@@ -268,7 +295,8 @@ module Google
268
295
  # batch_snapshot.close
269
296
  #
270
297
  def partition_read table, columns, keys: nil, index: nil,
271
- partition_size_bytes: nil, max_partitions: nil
298
+ partition_size_bytes: nil, max_partitions: nil,
299
+ call_options: nil
272
300
  ensure_session!
273
301
 
274
302
  columns = Array(columns).map(&:to_s)
@@ -278,7 +306,8 @@ module Google
278
306
  table, columns, tx_selector,
279
307
  keys: keys, index: index,
280
308
  partition_size_bytes: partition_size_bytes,
281
- max_partitions: max_partitions
309
+ max_partitions: max_partitions,
310
+ call_options: call_options
282
311
 
283
312
  results.partitions.map do |grpc|
284
313
  # Convert partition protos to read request protos
@@ -304,6 +333,19 @@ module Google
304
333
  #
305
334
  # @param [Google::Cloud::Spanner::Partition] partition The partition to
306
335
  # be executed.
336
+ # @param [Hash] call_options A hash of values to specify the custom
337
+ # call options, e.g., timeout, retries, etc. Call options are
338
+ # optional. The following settings can be provided:
339
+ #
340
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
341
+ # that overrides the default setting.
342
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
343
+ # setting of retry policy with the following keys:
344
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
345
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
346
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
347
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
348
+ # trigger a retry.
307
349
  #
308
350
  # @example
309
351
  # require "google/cloud/spanner"
@@ -320,7 +362,7 @@ module Google
320
362
  #
321
363
  # batch_snapshot.close
322
364
  #
323
- def execute_partition partition
365
+ def execute_partition partition, call_options: nil
324
366
  ensure_session!
325
367
 
326
368
  partition = Partition.load partition unless partition.is_a? Partition
@@ -329,10 +371,11 @@ module Google
329
371
  # TODO: raise if session.path != partition.session
330
372
  # TODO: raise if grpc.transaction != partition.transaction
331
373
 
374
+ opts = { call_options: call_options }
332
375
  if partition.execute?
333
- execute_partition_query partition
376
+ execute_partition_query partition, opts
334
377
  elsif partition.read?
335
- execute_partition_read partition
378
+ execute_partition_read partition, opts
336
379
  end
337
380
  end
338
381
 
@@ -430,6 +473,19 @@ module Google
430
473
  # * `:optimizer_version` (String) The version of optimizer to use.
431
474
  # Empty to use database default. "latest" to use the latest
432
475
  # available optimizer version.
476
+ # @param [Hash] call_options A hash of values to specify the custom
477
+ # call options, e.g., timeout, retries, etc. Call options are
478
+ # optional. The following settings can be provided:
479
+ #
480
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
481
+ # that overrides the default setting.
482
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
483
+ # setting of retry policy with the following keys:
484
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
485
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
486
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
487
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
488
+ # trigger a retry.
433
489
  #
434
490
  # @return [Google::Cloud::Spanner::Results] The results of the query
435
491
  # execution.
@@ -549,14 +605,40 @@ module Google
549
605
  # puts "User #{row[:id]} is #{row[:name]}"
550
606
  # end
551
607
  #
552
- def execute_query sql, params: nil, types: nil, query_options: nil
608
+ # @example Query using custom timeout and retry policy:
609
+ # require "google/cloud/spanner"
610
+ #
611
+ # spanner = Google::Cloud::Spanner.new
612
+ # batch_client = spanner.batch_client "my-instance", "my-database"
613
+ # batch_snapshot = batch_client.batch_snapshot
614
+ #
615
+ # timeout = 30.0
616
+ # retry_policy = {
617
+ # initial_delay: 0.25,
618
+ # max_delay: 32.0,
619
+ # multiplier: 1.3,
620
+ # retry_codes: ["UNAVAILABLE"]
621
+ # }
622
+ # call_options = { timeout: timeout, retry_policy: retry_policy }
623
+ #
624
+ # results = batch_snapshot.execute_query \
625
+ # "SELECT * FROM users",
626
+ # call_options: call_options
627
+ #
628
+ # results.rows.each do |row|
629
+ # puts "User #{row[:id]} is #{row[:name]}"
630
+ # end
631
+ #
632
+ def execute_query sql, params: nil, types: nil, query_options: nil,
633
+ call_options: nil
553
634
  ensure_session!
554
635
 
555
636
  params, types = Convert.to_input_params_and_types params, types
556
637
 
557
638
  session.execute_query sql, params: params, types: types,
558
639
  transaction: tx_selector,
559
- query_options: query_options
640
+ query_options: query_options,
641
+ call_options: call_options
560
642
  end
561
643
  alias execute execute_query
562
644
  alias query execute_query
@@ -578,6 +660,19 @@ module Google
578
660
  # Optional.
579
661
  # @param [Integer] limit If greater than zero, no more than this number
580
662
  # of rows will be returned. The default is no limit.
663
+ # @param [Hash] call_options A hash of values to specify the custom
664
+ # call options, e.g., timeout, retries, etc. Call options are
665
+ # optional. The following settings can be provided:
666
+ #
667
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
668
+ # that overrides the default setting.
669
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
670
+ # setting of retry policy with the following keys:
671
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
672
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
673
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
674
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
675
+ # trigger a retry.
581
676
  #
582
677
  # @return [Google::Cloud::Spanner::Results] The results of the read
583
678
  # operation.
@@ -595,14 +690,16 @@ module Google
595
690
  # puts "User #{row[:id]} is #{row[:name]}"
596
691
  # end
597
692
  #
598
- def read table, columns, keys: nil, index: nil, limit: nil
693
+ def read table, columns, keys: nil, index: nil, limit: nil,
694
+ call_options: nil
599
695
  ensure_session!
600
696
 
601
697
  columns = Array(columns).map(&:to_s)
602
698
  keys = Convert.to_key_set keys
603
699
 
604
700
  session.read table, columns, keys: keys, index: index, limit: limit,
605
- transaction: tx_selector
701
+ transaction: tx_selector,
702
+ call_options: call_options
606
703
  end
607
704
 
608
705
  ##
@@ -690,7 +787,7 @@ module Google
690
787
  raise "Must have active connection to service" unless session
691
788
  end
692
789
 
693
- def execute_partition_query partition
790
+ def execute_partition_query partition, call_options: nil
694
791
  query_options = partition.execute.query_options
695
792
  query_options = query_options.to_h unless query_options.nil?
696
793
  session.execute_query \
@@ -699,16 +796,18 @@ module Google
699
796
  types: partition.execute.param_types.to_h,
700
797
  transaction: partition.execute.transaction,
701
798
  partition_token: partition.execute.partition_token,
702
- query_options: query_options
799
+ query_options: query_options,
800
+ call_options: call_options
703
801
  end
704
802
 
705
- def execute_partition_read partition
803
+ def execute_partition_read partition, call_options: nil
706
804
  session.read partition.read.table,
707
805
  partition.read.columns.to_a,
708
806
  keys: partition.read.key_set,
709
807
  index: partition.read.index,
710
808
  transaction: partition.read.transaction,
711
- partition_token: partition.read.partition_token
809
+ partition_token: partition.read.partition_token,
810
+ call_options: call_options
712
811
  end
713
812
  end
714
813
  end
@@ -222,6 +222,19 @@ module Google
222
222
  # * `:optimizer_version` (String) The version of optimizer to use.
223
223
  # Empty to use database default. "latest" to use the latest
224
224
  # available optimizer version.
225
+ # @param [Hash] call_options A hash of values to specify the custom
226
+ # call options, e.g., timeout, retries, etc. Call options are
227
+ # optional. The following settings can be provided:
228
+ #
229
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
230
+ # that overrides the default setting.
231
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
232
+ # setting of retry policy with the following keys:
233
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
234
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
235
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
236
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
237
+ # trigger a retry.
225
238
  #
226
239
  # @return [Google::Cloud::Spanner::Results] The results of the query
227
240
  # execution.
@@ -335,8 +348,31 @@ module Google
335
348
  # puts "User #{row[:id]} is #{row[:name]}"
336
349
  # end
337
350
  #
351
+ # @example Query using custom timeout and retry policy:
352
+ # require "google/cloud/spanner"
353
+ #
354
+ # spanner = Google::Cloud::Spanner.new
355
+ #
356
+ # db = spanner.client "my-instance", "my-database"
357
+ #
358
+ # timeout = 30.0
359
+ # retry_policy = {
360
+ # initial_delay: 0.25,
361
+ # max_delay: 32.0,
362
+ # multiplier: 1.3,
363
+ # retry_codes: ["UNAVAILABLE"]
364
+ # }
365
+ # call_options = { timeout: timeout, retry_policy: retry_policy }
366
+ #
367
+ # results = db.execute_query \
368
+ # "SELECT * FROM users", call_options: call_options
369
+ #
370
+ # results.rows.each do |row|
371
+ # puts "User #{row[:id]} is #{row[:name]}"
372
+ # end
373
+ #
338
374
  def execute_query sql, params: nil, types: nil, single_use: nil,
339
- query_options: nil
375
+ query_options: nil, call_options: nil
340
376
  validate_single_use_args! single_use
341
377
  ensure_service!
342
378
 
@@ -347,7 +383,7 @@ module Google
347
383
  @pool.with_session do |session|
348
384
  results = session.execute_query \
349
385
  sql, params: params, types: types, transaction: single_use_tx,
350
- query_options: query_options
386
+ query_options: query_options, call_options: call_options
351
387
  end
352
388
  results
353
389
  end
@@ -474,14 +510,6 @@ module Google
474
510
  # value in `params`. In these cases, the `types` hash can be used to
475
511
  # specify the exact SQL type for some or all of the SQL query
476
512
  # parameters.
477
- # @param [Hash] query_options A hash of values to specify the custom
478
- # query options for executing SQL query. Query options are optional.
479
- # The following settings can be provided:
480
- #
481
- # * `:optimizer_version` (String) The version of optimizer to use.
482
- # Empty to use database default. "latest" to use the latest
483
- # available optimizer version.
484
- #
485
513
  #
486
514
  # The keys of the hash should be query string parameter placeholders,
487
515
  # minus the "@". The values of the hash should be Cloud Spanner type
@@ -499,6 +527,26 @@ module Google
499
527
  # `[:INT64]`.
500
528
  # * {Fields} - Nested Structs are specified by providing a Fields
501
529
  # object.
530
+ # @param [Hash] query_options A hash of values to specify the custom
531
+ # query options for executing SQL query. Query options are optional.
532
+ # The following settings can be provided:
533
+ #
534
+ # * `:optimizer_version` (String) The version of optimizer to use.
535
+ # Empty to use database default. "latest" to use the latest
536
+ # available optimizer version.
537
+ # @param [Hash] call_options A hash of values to specify the custom
538
+ # call options, e.g., timeout, retries, etc. Call options are
539
+ # optional. The following settings can be provided:
540
+ #
541
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
542
+ # that overrides the default setting.
543
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
544
+ # setting of retry policy with the following keys:
545
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
546
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
547
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
548
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
549
+ # trigger a retry.
502
550
  # @return [Integer] The lower bound number of rows that were modified.
503
551
  #
504
552
  # @example
@@ -529,8 +577,28 @@ module Google
529
577
  # row_count = db.execute_partition_update \
530
578
  # "UPDATE users SET friends = NULL WHERE active = false",
531
579
  # query_options: { optimizer_version: "1" }
580
+ #
581
+ # @example Query using custom timeout and retry policy:
582
+ # require "google/cloud/spanner"
583
+ #
584
+ # spanner = Google::Cloud::Spanner.new
585
+ # db = spanner.client "my-instance", "my-database"
586
+ #
587
+ # timeout = 30.0
588
+ # retry_policy = {
589
+ # initial_delay: 0.25,
590
+ # max_delay: 32.0,
591
+ # multiplier: 1.3,
592
+ # retry_codes: ["UNAVAILABLE"]
593
+ # }
594
+ # call_options = { timeout: timeout, retry_policy: retry_policy }
595
+ #
596
+ # row_count = db.execute_partition_update \
597
+ # "UPDATE users SET friends = NULL WHERE active = false",
598
+ # call_options: call_options
599
+ #
532
600
  def execute_partition_update sql, params: nil, types: nil,
533
- query_options: nil
601
+ query_options: nil, call_options: nil
534
602
  ensure_service!
535
603
 
536
604
  params, types = Convert.to_input_params_and_types params, types
@@ -539,7 +607,7 @@ module Google
539
607
  results = session.execute_query \
540
608
  sql, params: params, types: types,
541
609
  transaction: pdml_transaction(session),
542
- query_options: query_options
610
+ query_options: query_options, call_options: call_options
543
611
  end
544
612
  # Stream all PartialResultSet to get ResultSetStats
545
613
  results.rows.to_a
@@ -620,6 +688,19 @@ module Google
620
688
  # Useful for reading the freshest data available at a nearby
621
689
  # replica, while bounding the possible staleness if the local
622
690
  # replica has fallen behind.
691
+ # @param [Hash] call_options A hash of values to specify the custom
692
+ # call options, e.g., timeout, retries, etc. Call options are
693
+ # optional. The following settings can be provided:
694
+ #
695
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
696
+ # that overrides the default setting.
697
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
698
+ # setting of retry policy with the following keys:
699
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
700
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
701
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
702
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
703
+ # trigger a retry.
623
704
  #
624
705
  # @return [Google::Cloud::Spanner::Results] The results of the read.
625
706
  #
@@ -649,8 +730,30 @@ module Google
649
730
  # puts "User #{row[:id]} is #{row[:name]}"
650
731
  # end
651
732
  #
733
+ # @example Read using custom timeout and retry.
734
+ # require "google/cloud/spanner"
735
+ #
736
+ # spanner = Google::Cloud::Spanner.new
737
+ #
738
+ # db = spanner.client "my-instance", "my-database"
739
+ #
740
+ # timeout = 30.0
741
+ # retry_policy = {
742
+ # initial_delay: 0.25,
743
+ # max_delay: 32.0,
744
+ # multiplier: 1.3,
745
+ # retry_codes: ["UNAVAILABLE"]
746
+ # }
747
+ # call_options = { timeout: timeout, retry_policy: retry_policy }
748
+ #
749
+ # results = db.read "users", [:id, :name], call_options: call_options
750
+ #
751
+ # results.rows.each do |row|
752
+ # puts "User #{row[:id]} is #{row[:name]}"
753
+ # end
754
+ #
652
755
  def read table, columns, keys: nil, index: nil, limit: nil,
653
- single_use: nil
756
+ single_use: nil, call_options: nil
654
757
  validate_single_use_args! single_use
655
758
  ensure_service!
656
759
 
@@ -662,7 +765,8 @@ module Google
662
765
  @pool.with_session do |session|
663
766
  results = session.read \
664
767
  table, columns, keys: keys, index: index, limit: limit,
665
- transaction: single_use_tx
768
+ transaction: single_use_tx,
769
+ call_options: call_options
666
770
  end
667
771
  results
668
772
  end
@@ -911,6 +1015,19 @@ module Google
911
1015
  # @param [Object, Array<Object>] keys A single, or list of keys or key
912
1016
  # ranges to match returned data to. Values should have exactly as many
913
1017
  # elements as there are columns in the primary key.
1018
+ # @param [Hash] call_options A hash of values to specify the custom
1019
+ # call options, e.g., timeout, retries, etc. Call options are
1020
+ # optional. The following settings can be provided:
1021
+ #
1022
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
1023
+ # that overrides the default setting.
1024
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
1025
+ # setting of retry policy with the following keys:
1026
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
1027
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
1028
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
1029
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
1030
+ # trigger a retry.
914
1031
  #
915
1032
  # @return [Time] The timestamp at which the operation committed.
916
1033
  #
@@ -923,9 +1040,9 @@ module Google
923
1040
  #
924
1041
  # db.delete "users", [1, 2, 3]
925
1042
  #
926
- def delete table, keys = []
1043
+ def delete table, keys = [], call_options: nil
927
1044
  @pool.with_session do |session|
928
- session.delete table, keys
1045
+ session.delete table, keys, call_options: call_options
929
1046
  end
930
1047
  end
931
1048
 
@@ -944,6 +1061,20 @@ module Google
944
1061
  # this method may be appropriate for latency sensitive and/or high
945
1062
  # throughput blind changes.
946
1063
  #
1064
+ # @param [Hash] call_options A hash of values to specify the custom
1065
+ # call options, e.g., timeout, retries, etc. Call options are
1066
+ # optional. The following settings can be provided:
1067
+ #
1068
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
1069
+ # that overrides the default setting.
1070
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
1071
+ # setting of retry policy with the following keys:
1072
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
1073
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
1074
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
1075
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
1076
+ # trigger a retry.
1077
+ #
947
1078
  # @yield [commit] The block for mutating the data.
948
1079
  # @yieldparam [Google::Cloud::Spanner::Commit] commit The Commit object.
949
1080
  #
@@ -961,11 +1092,11 @@ module Google
961
1092
  # c.insert "users", [{ id: 2, name: "Harvey", active: true }]
962
1093
  # end
963
1094
  #
964
- def commit &block
1095
+ def commit call_options: nil, &block
965
1096
  raise ArgumentError, "Must provide a block" unless block_given?
966
1097
 
967
1098
  @pool.with_session do |session|
968
- session.commit(&block)
1099
+ session.commit(call_options: call_options, &block)
969
1100
  end
970
1101
  end
971
1102
 
@@ -988,6 +1119,19 @@ module Google
988
1119
  #
989
1120
  # @param [Numeric] deadline The total amount of time in seconds the
990
1121
  # transaction has to succeed. The default is `120`.
1122
+ # @param [Hash] call_options A hash of values to specify the custom
1123
+ # call options, e.g., timeout, retries, etc. Call options are
1124
+ # optional. The following settings can be provided:
1125
+ #
1126
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
1127
+ # that overrides the default setting.
1128
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
1129
+ # setting of retry policy with the following keys:
1130
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
1131
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
1132
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
1133
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
1134
+ # trigger a retry.
991
1135
  #
992
1136
  # @yield [transaction] The block for reading and writing data.
993
1137
  # @yieldparam [Google::Cloud::Spanner::Transaction] transaction The
@@ -1029,7 +1173,7 @@ module Google
1029
1173
  # end
1030
1174
  # end
1031
1175
  #
1032
- def transaction deadline: 120
1176
+ def transaction deadline: 120, call_options: nil
1033
1177
  ensure_service!
1034
1178
  unless Thread.current[:transaction_id].nil?
1035
1179
  raise "Nested transactions are not allowed"
@@ -1044,7 +1188,8 @@ module Google
1044
1188
  Thread.current[:transaction_id] = tx.transaction_id
1045
1189
  yield tx
1046
1190
  commit_resp = @project.service.commit \
1047
- tx.session.path, tx.mutations, transaction_id: tx.transaction_id
1191
+ tx.session.path, tx.mutations,
1192
+ transaction_id: tx.transaction_id, call_options: call_options
1048
1193
  return Convert.timestamp_to_time commit_resp.commit_timestamp
1049
1194
  rescue GRPC::Aborted, Google::Cloud::AbortedError => err
1050
1195
  # Re-raise if deadline has passed
@@ -1109,6 +1254,19 @@ module Google
1109
1254
  # timestamp negotiation overhead of single-use `staleness`. (See
1110
1255
  # [TransactionOptions](https://cloud.google.com/spanner/docs/reference/rpc/google.spanner.v1#transactionoptions).)
1111
1256
  # @param [Numeric] exact_staleness Same as `staleness`.
1257
+ # @param [Hash] call_options A hash of values to specify the custom
1258
+ # call options, e.g., timeout, retries, etc. Call options are
1259
+ # optional. The following settings can be provided:
1260
+ #
1261
+ # * `:timeout` (Numeric) A numeric value of custom timeout in seconds
1262
+ # that overrides the default setting.
1263
+ # * `:retry_policy` (Hash) A hash of values that overrides the default
1264
+ # setting of retry policy with the following keys:
1265
+ # * `:initial_delay` (`Numeric`) - The initial delay in seconds.
1266
+ # * `:max_delay` (`Numeric`) - The max delay in seconds.
1267
+ # * `:multiplier` (`Numeric`) - The incremental backoff multiplier.
1268
+ # * `:retry_codes` (`Array<String>`) - The error codes that should
1269
+ # trigger a retry.
1112
1270
  #
1113
1271
  # @yield [snapshot] The block for reading and writing data.
1114
1272
  # @yieldparam [Google::Cloud::Spanner::Snapshot] snapshot The Snapshot
@@ -1129,7 +1287,7 @@ module Google
1129
1287
  # end
1130
1288
  #
1131
1289
  def snapshot strong: nil, timestamp: nil, read_timestamp: nil,
1132
- staleness: nil, exact_staleness: nil
1290
+ staleness: nil, exact_staleness: nil, call_options: nil
1133
1291
  validate_snapshot_args! strong: strong, timestamp: timestamp,
1134
1292
  read_timestamp: read_timestamp,
1135
1293
  staleness: staleness,
@@ -1145,7 +1303,8 @@ module Google
1145
1303
  snp_grpc = @project.service.create_snapshot \
1146
1304
  session.path, strong: strong,
1147
1305
  timestamp: (timestamp || read_timestamp),
1148
- staleness: (staleness || exact_staleness)
1306
+ staleness: (staleness || exact_staleness),
1307
+ call_options: call_options
1149
1308
  Thread.current[:transaction_id] = snp_grpc.id
1150
1309
  snp = Snapshot.from_grpc snp_grpc, session
1151
1310
  yield snp if block_given?