google-cloud-spanner 2.0.0 → 2.5.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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +49 -0
  3. data/CONTRIBUTING.md +2 -2
  4. data/LOGGING.md +1 -1
  5. data/lib/google-cloud-spanner.rb +1 -0
  6. data/lib/google/cloud/spanner.rb +7 -5
  7. data/lib/google/cloud/spanner/backup.rb +10 -2
  8. data/lib/google/cloud/spanner/backup/job.rb +8 -8
  9. data/lib/google/cloud/spanner/backup/job/list.rb +2 -2
  10. data/lib/google/cloud/spanner/backup/list.rb +2 -2
  11. data/lib/google/cloud/spanner/batch_snapshot.rb +114 -15
  12. data/lib/google/cloud/spanner/batch_update.rb +3 -1
  13. data/lib/google/cloud/spanner/client.rb +413 -78
  14. data/lib/google/cloud/spanner/commit_response.rb +87 -0
  15. data/lib/google/cloud/spanner/commit_response/commit_stats.rb +51 -0
  16. data/lib/google/cloud/spanner/convert.rb +9 -0
  17. data/lib/google/cloud/spanner/data.rb +4 -5
  18. data/lib/google/cloud/spanner/database.rb +25 -3
  19. data/lib/google/cloud/spanner/database/backup_info.rb +12 -3
  20. data/lib/google/cloud/spanner/database/job/list.rb +2 -2
  21. data/lib/google/cloud/spanner/database/list.rb +4 -4
  22. data/lib/google/cloud/spanner/fields.rb +3 -2
  23. data/lib/google/cloud/spanner/instance/config/list.rb +4 -4
  24. data/lib/google/cloud/spanner/instance/list.rb +4 -4
  25. data/lib/google/cloud/spanner/partition.rb +4 -2
  26. data/lib/google/cloud/spanner/policy.rb +3 -2
  27. data/lib/google/cloud/spanner/pool.rb +10 -10
  28. data/lib/google/cloud/spanner/results.rb +105 -26
  29. data/lib/google/cloud/spanner/service.rb +218 -107
  30. data/lib/google/cloud/spanner/session.rb +361 -30
  31. data/lib/google/cloud/spanner/snapshot.rb +58 -4
  32. data/lib/google/cloud/spanner/status.rb +4 -1
  33. data/lib/google/cloud/spanner/transaction.rb +114 -8
  34. data/lib/google/cloud/spanner/version.rb +1 -1
  35. metadata +12 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 49b3d879f62998284edf63a941432c67a8caebf708f2ef4df883a3f336dbc758
4
- data.tar.gz: e6768ee6037df38c765f888f64a4b29cc192b8a30a1bbcf02d01240c3c228621
3
+ metadata.gz: 9768d839e58d7697a3ec4d57f924c6dd251bf59b1bb531ca2fbcf14da1b6120d
4
+ data.tar.gz: 2fd33ab3bfddeaed840fd815d057e3ddb81bf3a4b746b88f20dcc72ecca46e44
5
5
  SHA512:
6
- metadata.gz: 3c456f4ee2482f6b0c488c749f11b508092b9c2a9befe8a4c44c74d6321c3dc1be43a6abd4cfec56c1ca7d2312feb79998383537ebd20bbe6f3d0be10f6cf576
7
- data.tar.gz: b31fad2484409183d77bb00e11ba3526fdb9d5ae6817e8a95af51f61e09d7d3635ac7e58c99fbbb4b862b49a3092d59f7e88505aa86cb509ab1d23447ebfb060
6
+ metadata.gz: ba9f01ea9fc094a4ece357bacddc46cf235704f242eea88393de8ea5b1e5ae56b1f5260ad26e999ad53047d4a4c7f6d855612ea6de139e80ae7d60ec6b305fdf
7
+ data.tar.gz: fb498abaae70d4b8c56736b8267f87ae3637ddfe6b3aad675ad35c2faa1d4681a3a91be98ce6604454b185557a11aaf5a8294b0e007a849ff08ff19cad3088ae
data/CHANGELOG.md CHANGED
@@ -1,5 +1,54 @@
1
1
  # Release History
2
2
 
3
+ ### 2.5.0 / 2021-03-10
4
+
5
+ #### Features
6
+
7
+ * Drop support for Ruby 2.4 and add support for Ruby 3.0
8
+
9
+ ### 2.4.0 / 2021-02-18
10
+
11
+ #### Features
12
+
13
+ * Point In Time Recovery (PITR) ([#8169](https://www.github.com/googleapis/google-cloud-ruby/issues/8169))
14
+ * feat(spanner): support pitr-lite
15
+ * feature(spanner): adds test for throttled
16
+ * feat(spanner): adds version time to backup
17
+ * test(spanner): adds unit test for create backup
18
+ * feat(spanner): exposes version time in backup
19
+ * chore: fixes rubocop violations
20
+ * fix: addresses PR comments
21
+ * test: adds integration tests for pitr backup
22
+
23
+ ### 2.3.0 / 2021-02-09
24
+
25
+ #### Features
26
+
27
+ * CommitStats in CommitResponse ([#8058](https://www.github.com/googleapis/google-cloud-ruby/issues/8058))
28
+ * optionalize `credentials` when using cloud spanner emulator host ([#8416](https://www.github.com/googleapis/google-cloud-ruby/issues/8416))
29
+ * Optionalize `credentials` when using Cloud Spanner Emulator
30
+ * Remove unnecessary credentials stub for emulator_host in Google::Cloud::Spanner.new
31
+ * Add test of explicit project_id in Google::Cloud::Spanner.new
32
+ * Update document for `emulator_host` without credentials
33
+ * Tidy code according to rubocop settings
34
+
35
+ ### 2.2.0 / 2020-09-15
36
+
37
+ #### Features
38
+
39
+ * quota_project can be set via library configuration
40
+ * Support numeric type.
41
+
42
+ #### Bug Fixes
43
+
44
+ * retry or resume eos and rst_stream errors
45
+
46
+ ### 2.1.0 / 2020-08-05
47
+
48
+ #### Features
49
+
50
+ * Support custom setting of timeout and retry
51
+
3
52
  ### 2.0.0 / 2020-07-23
4
53
 
5
54
  This is a major update that removes the "low-level" client interface code, and
data/CONTRIBUTING.md CHANGED
@@ -24,7 +24,7 @@ be able to accept your pull requests.
24
24
  In order to use the google-cloud-spanner console and run the project's tests,
25
25
  there is a small amount of setup:
26
26
 
27
- 1. Install Ruby. google-cloud-spanner requires Ruby 2.4+. You may choose to
27
+ 1. Install Ruby. google-cloud-spanner requires Ruby 2.5+. You may choose to
28
28
  manage your Ruby and gem installations with [RVM](https://rvm.io/),
29
29
  [rbenv](https://github.com/rbenv/rbenv), or
30
30
  [chruby](https://github.com/postmodern/chruby).
@@ -45,7 +45,7 @@ there is a small amount of setup:
45
45
 
46
46
  ```sh
47
47
  $ cd google-cloud-spanner/
48
- $ bundle exec rake bundleupdate
48
+ $ bundle install
49
49
  ```
50
50
 
51
51
  ## Console
data/LOGGING.md CHANGED
@@ -3,7 +3,7 @@
3
3
  To enable logging for this library, set the logger for the underlying
4
4
  [gRPC](https://github.com/grpc/grpc/tree/master/src/ruby) library. The logger
5
5
  that you set may be a Ruby stdlib
6
- [`Logger`](https://ruby-doc.org/stdlib-2.5.0/libdoc/logger/rdoc/Logger.html) as
6
+ [`Logger`](https://ruby-doc.org/stdlib/libdoc/logger/rdoc/Logger.html) as
7
7
  shown below, or a
8
8
  [`Google::Cloud::Logging::Logger`](https://googleapis.dev/ruby/google-cloud-logging/latest)
9
9
  that will write logs to [Stackdriver
@@ -174,6 +174,7 @@ Google::Cloud.configure.add_config! :spanner do |config|
174
174
  allow_nil: true
175
175
  config.add_alias! :keyfile, :credentials
176
176
  config.add_field! :scope, default_scopes, match: [String, Array]
177
+ config.add_field! :quota_project, nil, match: String
177
178
  config.add_field! :timeout, nil, match: Integer
178
179
  config.add_field! :endpoint, "spanner.googleapis.com", match: String
179
180
  config.add_field! :emulator_host, default_emulator, match: String, allow_nil: true
@@ -49,6 +49,8 @@ module Google
49
49
  # @param [String, Hash, Google::Auth::Credentials] credentials The path to
50
50
  # the keyfile as a String, the contents of the keyfile as a Hash, or a
51
51
  # Google::Auth::Credentials object. (See {Spanner::Credentials})
52
+ # If `emulator_host` is present, this becomes optional and the value is
53
+ # internally overriden with `:this_channel_is_insecure`.
52
54
  # @param [String, Array<String>] scope The OAuth 2.0 scopes controlling
53
55
  # the set of resources and operations that the connection can access.
54
56
  # See [Using OAuth 2.0 to Access Google
@@ -60,7 +62,7 @@ module Google
60
62
  # * `https://www.googleapis.com/auth/spanner.data`
61
63
  # @param [Integer] timeout Default timeout to use in requests. Optional.
62
64
  # @param [String] endpoint Override of the endpoint host name. Optional.
63
- # If the param is nil, uses the default endpoint.
65
+ # If the param is nil, uses `emulator_host` or the default endpoint.
64
66
  # @param [String] project Alias for the `project_id` argument. Deprecated.
65
67
  # @param [String] keyfile Alias for the `credentials` argument.
66
68
  # Deprecated.
@@ -91,19 +93,19 @@ module Google
91
93
  def self.new project_id: nil, credentials: nil, scope: nil, timeout: nil,
92
94
  endpoint: nil, project: nil, keyfile: nil,
93
95
  emulator_host: nil, lib_name: nil, lib_version: nil
94
- project_id ||= (project || default_project_id)
96
+ project_id ||= project || default_project_id
95
97
  scope ||= configure.scope
96
98
  timeout ||= configure.timeout
97
- endpoint ||= configure.endpoint
98
- credentials ||= (keyfile || default_credentials(scope: scope))
99
99
  emulator_host ||= configure.emulator_host
100
+ endpoint ||= emulator_host || configure.endpoint
101
+ credentials ||= keyfile
100
102
  lib_name ||= configure.lib_name
101
103
  lib_version ||= configure.lib_version
102
104
 
103
105
  if emulator_host
104
106
  credentials = :this_channel_is_insecure
105
- endpoint = emulator_host
106
107
  else
108
+ credentials ||= default_credentials scope: scope
107
109
  unless credentials.is_a? Google::Auth::Credentials
108
110
  credentials = Spanner::Credentials.new credentials, scope: scope
109
111
  end
@@ -155,9 +155,17 @@ module Google
155
155
  @grpc.expire_time = Convert.time_to_timestamp time
156
156
  update_mask = Google::Protobuf::FieldMask.new paths: ["expire_time"]
157
157
  @grpc = service.update_backup @grpc, update_mask
158
- rescue Google::Cloud::Error => error
158
+ rescue Google::Cloud::Error => e
159
159
  @grpc.expire_time = expire_time_was
160
- raise error
160
+ raise e
161
+ end
162
+
163
+ ##
164
+ # The timestamp when a consistent copy of the database for the backup was
165
+ # taken. The version time has microseconds granularity.
166
+ # @return [Time]
167
+ def version_time
168
+ Convert.timestamp_to_time @grpc.version_time
161
169
  end
162
170
 
163
171
  ##
@@ -39,7 +39,7 @@ module Google
39
39
  #
40
40
  # database = spanner.database "my-instance", "my-database"
41
41
  # expire_time = Time.now + 36000
42
- # job = database.create_backup "my-backup", expire_time: expire_time
42
+ # job = database.create_backup "my-backup", expire_time
43
43
  #
44
44
  # job.done? #=> false
45
45
  # job.reload! # API call
@@ -80,7 +80,7 @@ module Google
80
80
  #
81
81
  # database = spanner.database "my-instance", "my-database"
82
82
  # expire_time = Time.now + 36000
83
- # job = database.create_backup "my-backup", expire_time: expire_time
83
+ # job = database.create_backup "my-backup", expire_time
84
84
  #
85
85
  # job.done? #=> false
86
86
  # job.reload!
@@ -105,7 +105,7 @@ module Google
105
105
  #
106
106
  # database = spanner.database "my-instance", "my-database"
107
107
  # expire_time = Time.now + 36000
108
- # job = database.create_backup "my-backup", expire_time: expire_time
108
+ # job = database.create_backup "my-backup", expire_time
109
109
  #
110
110
  # job.done? #=> false
111
111
  #
@@ -125,7 +125,7 @@ module Google
125
125
  #
126
126
  # database = spanner.database "my-instance", "my-database"
127
127
  # expire_time = Time.now + 36000
128
- # job = database.create_backup "my-backup", expire_time: expire_time
128
+ # job = database.create_backup "my-backup", expire_time
129
129
  #
130
130
  # job.error? #=> false
131
131
  #
@@ -147,7 +147,7 @@ module Google
147
147
  #
148
148
  # database = spanner.database "my-instance", "my-database"
149
149
  # expire_time = Time.now + 36000
150
- # job = database.create_backup "my-backup", expire_time: expire_time
150
+ # job = database.create_backup "my-backup", expire_time
151
151
  #
152
152
  # job.error? # true
153
153
  #
@@ -172,7 +172,7 @@ module Google
172
172
  #
173
173
  # database = spanner.database "my-instance", "my-database"
174
174
  # expire_time = Time.now + 36000
175
- # job = database.create_backup "my-backup", expire_time: expire_time
175
+ # job = database.create_backup "my-backup", expire_time
176
176
  #
177
177
  # job.done? #=> false
178
178
  # job.reload! # API call
@@ -195,7 +195,7 @@ module Google
195
195
  #
196
196
  # database = spanner.database "my-instance", "my-database"
197
197
  # expire_time = Time.now + 36000
198
- # job = database.create_backup "my-backup", expire_time: expire_time
198
+ # job = database.create_backup "my-backup", expire_time
199
199
  #
200
200
  # job.done? #=> false
201
201
  # job.wait_until_done!
@@ -215,7 +215,7 @@ module Google
215
215
  #
216
216
  # database = spanner.database "my-instance", "my-database"
217
217
  # expire_time = Time.now + 36000
218
- # job = database.create_backup "my-backup", expire_time: expire_time
218
+ # job = database.create_backup "my-backup", expire_time
219
219
  #
220
220
  # job.done? #=> false
221
221
  # job.cancel
@@ -130,12 +130,12 @@ module Google
130
130
  # job.backup.backup_id
131
131
  # end
132
132
  #
133
- def all
133
+ def all &block
134
134
  return enum_for :all unless block_given?
135
135
 
136
136
  results = self
137
137
  loop do
138
- results.each { |r| yield r }
138
+ results.each(&block)
139
139
  break unless next?
140
140
  grpc.next_page
141
141
  results = self.class.from_grpc grpc, service
@@ -128,12 +128,12 @@ module Google
128
128
  # backup.backup_id
129
129
  # end
130
130
  #
131
- def all
131
+ def all &block
132
132
  return enum_for :all unless block_given?
133
133
 
134
134
  results = self
135
135
  loop do
136
- results.each { |r| yield r }
136
+ results.each(&block)
137
137
  break unless next?
138
138
  grpc.next_page
139
139
  results = self.class.from_grpc grpc, service
@@ -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