google-cloud-spanner 2.4.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/CONTRIBUTING.md +1 -1
- data/LOGGING.md +1 -1
- data/lib/google/cloud/spanner/backup.rb +2 -2
- data/lib/google/cloud/spanner/backup/job.rb +8 -8
- data/lib/google/cloud/spanner/backup/job/list.rb +2 -2
- data/lib/google/cloud/spanner/backup/list.rb +2 -2
- data/lib/google/cloud/spanner/batch_snapshot.rb +2 -2
- data/lib/google/cloud/spanner/batch_update.rb +3 -1
- data/lib/google/cloud/spanner/client.rb +43 -49
- data/lib/google/cloud/spanner/data.rb +4 -5
- data/lib/google/cloud/spanner/database/job/list.rb +2 -2
- data/lib/google/cloud/spanner/database/list.rb +4 -4
- data/lib/google/cloud/spanner/fields.rb +3 -2
- data/lib/google/cloud/spanner/instance/config/list.rb +4 -4
- data/lib/google/cloud/spanner/instance/list.rb +4 -4
- data/lib/google/cloud/spanner/partition.rb +4 -2
- data/lib/google/cloud/spanner/policy.rb +3 -2
- data/lib/google/cloud/spanner/pool.rb +10 -10
- data/lib/google/cloud/spanner/results.rb +6 -6
- data/lib/google/cloud/spanner/service.rb +6 -2
- data/lib/google/cloud/spanner/session.rb +5 -5
- data/lib/google/cloud/spanner/status.rb +4 -1
- data/lib/google/cloud/spanner/version.rb +1 -1
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9768d839e58d7697a3ec4d57f924c6dd251bf59b1bb531ca2fbcf14da1b6120d
|
4
|
+
data.tar.gz: 2fd33ab3bfddeaed840fd815d057e3ddb81bf3a4b746b88f20dcc72ecca46e44
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ba9f01ea9fc094a4ece357bacddc46cf235704f242eea88393de8ea5b1e5ae56b1f5260ad26e999ad53047d4a4c7f6d855612ea6de139e80ae7d60ec6b305fdf
|
7
|
+
data.tar.gz: fb498abaae70d4b8c56736b8267f87ae3637ddfe6b3aad675ad35c2faa1d4681a3a91be98ce6604454b185557a11aaf5a8294b0e007a849ff08ff19cad3088ae
|
data/CHANGELOG.md
CHANGED
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.
|
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).
|
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
|
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
|
@@ -155,9 +155,9 @@ 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 =>
|
158
|
+
rescue Google::Cloud::Error => e
|
159
159
|
@grpc.expire_time = expire_time_was
|
160
|
-
raise
|
160
|
+
raise e
|
161
161
|
end
|
162
162
|
|
163
163
|
##
|
@@ -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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
136
|
+
results.each(&block)
|
137
137
|
break unless next?
|
138
138
|
grpc.next_page
|
139
139
|
results = self.class.from_grpc grpc, service
|
@@ -373,9 +373,9 @@ module Google
|
|
373
373
|
|
374
374
|
opts = { call_options: call_options }
|
375
375
|
if partition.execute?
|
376
|
-
execute_partition_query partition, opts
|
376
|
+
execute_partition_query partition, **opts
|
377
377
|
elsif partition.read?
|
378
|
-
execute_partition_read partition, opts
|
378
|
+
execute_partition_read partition, **opts
|
379
379
|
end
|
380
380
|
end
|
381
381
|
|
@@ -59,7 +59,7 @@ module Google
|
|
59
59
|
@instance_id = instance_id
|
60
60
|
@database_id = database_id
|
61
61
|
@session_labels = session_labels
|
62
|
-
@pool = Pool.new self, pool_opts
|
62
|
+
@pool = Pool.new self, **pool_opts
|
63
63
|
@query_options = query_options
|
64
64
|
end
|
65
65
|
|
@@ -1248,7 +1248,6 @@ module Google
|
|
1248
1248
|
end
|
1249
1249
|
|
1250
1250
|
# rubocop:disable Metrics/AbcSize
|
1251
|
-
# rubocop:disable Metrics/BlockLength
|
1252
1251
|
# rubocop:disable Metrics/MethodLength
|
1253
1252
|
|
1254
1253
|
##
|
@@ -1362,44 +1361,41 @@ module Google
|
|
1362
1361
|
start_time = current_time
|
1363
1362
|
|
1364
1363
|
@pool.with_transaction do |tx|
|
1365
|
-
|
1366
|
-
|
1367
|
-
|
1368
|
-
|
1369
|
-
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1373
|
-
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
if
|
1378
|
-
|
1379
|
-
err = Google::Cloud::Error.from_error err
|
1380
|
-
end
|
1381
|
-
raise err
|
1364
|
+
Thread.current[:transaction_id] = tx.transaction_id
|
1365
|
+
yield tx
|
1366
|
+
commit_resp = @project.service.commit \
|
1367
|
+
tx.session.path, tx.mutations,
|
1368
|
+
transaction_id: tx.transaction_id,
|
1369
|
+
commit_options: commit_options,
|
1370
|
+
call_options: call_options
|
1371
|
+
resp = CommitResponse.from_grpc commit_resp
|
1372
|
+
commit_options ? resp : resp.timestamp
|
1373
|
+
rescue GRPC::Aborted, Google::Cloud::AbortedError => e
|
1374
|
+
# Re-raise if deadline has passed
|
1375
|
+
if current_time - start_time > deadline
|
1376
|
+
if e.is_a? GRPC::BadStatus
|
1377
|
+
e = Google::Cloud::Error.from_error e
|
1382
1378
|
end
|
1383
|
-
|
1384
|
-
sleep(delay_from_aborted(err) || backoff *= 1.3)
|
1385
|
-
# Create new transaction on the session and retry the block
|
1386
|
-
tx = tx.session.create_transaction
|
1387
|
-
retry
|
1388
|
-
rescue StandardError => err
|
1389
|
-
# Rollback transaction when handling unexpected error
|
1390
|
-
tx.session.rollback tx.transaction_id
|
1391
|
-
# Return nil if raised with rollback.
|
1392
|
-
return nil if err.is_a? Rollback
|
1393
|
-
# Re-raise error.
|
1394
|
-
raise err
|
1395
|
-
ensure
|
1396
|
-
Thread.current[:transaction_id] = nil
|
1379
|
+
raise e
|
1397
1380
|
end
|
1381
|
+
# Sleep the amount from RetryDelay, or incremental backoff
|
1382
|
+
sleep(delay_from_aborted(e) || backoff *= 1.3)
|
1383
|
+
# Create new transaction on the session and retry the block
|
1384
|
+
tx = tx.session.create_transaction
|
1385
|
+
retry
|
1386
|
+
rescue StandardError => e
|
1387
|
+
# Rollback transaction when handling unexpected error
|
1388
|
+
tx.session.rollback tx.transaction_id
|
1389
|
+
# Return nil if raised with rollback.
|
1390
|
+
return nil if e.is_a? Rollback
|
1391
|
+
# Re-raise error.
|
1392
|
+
raise e
|
1393
|
+
ensure
|
1394
|
+
Thread.current[:transaction_id] = nil
|
1398
1395
|
end
|
1399
1396
|
end
|
1400
1397
|
|
1401
1398
|
# rubocop:enable Metrics/AbcSize
|
1402
|
-
# rubocop:enable Metrics/BlockLength
|
1403
1399
|
# rubocop:enable Metrics/MethodLength
|
1404
1400
|
|
1405
1401
|
##
|
@@ -1481,18 +1477,16 @@ module Google
|
|
1481
1477
|
end
|
1482
1478
|
|
1483
1479
|
@pool.with_session do |session|
|
1484
|
-
|
1485
|
-
|
1486
|
-
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
|
1491
|
-
|
1492
|
-
|
1493
|
-
|
1494
|
-
Thread.current[:transaction_id] = nil
|
1495
|
-
end
|
1480
|
+
snp_grpc = @project.service.create_snapshot \
|
1481
|
+
session.path, strong: strong,
|
1482
|
+
timestamp: (timestamp || read_timestamp),
|
1483
|
+
staleness: (staleness || exact_staleness),
|
1484
|
+
call_options: call_options
|
1485
|
+
Thread.current[:transaction_id] = snp_grpc.id
|
1486
|
+
snp = Snapshot.from_grpc snp_grpc, session
|
1487
|
+
yield snp if block_given?
|
1488
|
+
ensure
|
1489
|
+
Thread.current[:transaction_id] = nil
|
1496
1490
|
end
|
1497
1491
|
nil
|
1498
1492
|
end
|
@@ -1691,7 +1685,7 @@ module Google
|
|
1691
1685
|
def batch_create_new_sessions total
|
1692
1686
|
sessions = []
|
1693
1687
|
remaining = total
|
1694
|
-
while remaining
|
1688
|
+
while remaining.positive?
|
1695
1689
|
sessions += batch_create_sessions remaining
|
1696
1690
|
remaining = total - sessions.count
|
1697
1691
|
end
|
@@ -1795,7 +1789,7 @@ module Google
|
|
1795
1789
|
|
1796
1790
|
def validate_deadline deadline
|
1797
1791
|
return 120 unless deadline.is_a? Numeric
|
1798
|
-
return 120 if deadline
|
1792
|
+
return 120 if deadline.negative?
|
1799
1793
|
deadline
|
1800
1794
|
end
|
1801
1795
|
|
@@ -1816,7 +1810,7 @@ module Google
|
|
1816
1810
|
seconds = err.metadata["retryDelay"]["seconds"].to_i
|
1817
1811
|
nanos = err.metadata["retryDelay"]["nanos"].to_i
|
1818
1812
|
return seconds if nanos.zero?
|
1819
|
-
return seconds + (nanos /
|
1813
|
+
return seconds + (nanos / 1_000_000_000.0)
|
1820
1814
|
end
|
1821
1815
|
# No metadata? Try the inner error
|
1822
1816
|
delay_from_aborted err.cause
|
@@ -139,9 +139,10 @@ module Google
|
|
139
139
|
#
|
140
140
|
def to_a skip_dup_check: nil
|
141
141
|
values.map do |value|
|
142
|
-
|
142
|
+
case value
|
143
|
+
when Data
|
143
144
|
value.to_h skip_dup_check: skip_dup_check
|
144
|
-
|
145
|
+
when Array
|
145
146
|
value.map do |v|
|
146
147
|
v.is_a?(Data) ? v.to_h(skip_dup_check: skip_dup_check) : v
|
147
148
|
end
|
@@ -169,9 +170,7 @@ module Google
|
|
169
170
|
# or indexes and corresponding values.
|
170
171
|
#
|
171
172
|
def to_h skip_dup_check: nil
|
172
|
-
|
173
|
-
raise DuplicateNameError if fields.duplicate_names?
|
174
|
-
end
|
173
|
+
raise DuplicateNameError if !skip_dup_check && fields.duplicate_names?
|
175
174
|
|
176
175
|
Hash[keys.zip to_a(skip_dup_check: skip_dup_check)]
|
177
176
|
end
|
@@ -130,12 +130,12 @@ module Google
|
|
130
130
|
# job.database.database_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
|
138
|
+
results.each(&block)
|
139
139
|
break unless next?
|
140
140
|
grpc.next_page
|
141
141
|
results = self.class.from_grpc grpc, service
|
@@ -71,7 +71,7 @@ module Google
|
|
71
71
|
return nil unless next?
|
72
72
|
ensure_service!
|
73
73
|
options = { token: token, max: @max }
|
74
|
-
grpc = @service.list_databases @instance_id, options
|
74
|
+
grpc = @service.list_databases @instance_id, **options
|
75
75
|
self.class.from_grpc grpc, @service, @max
|
76
76
|
end
|
77
77
|
|
@@ -123,17 +123,17 @@ module Google
|
|
123
123
|
# puts database.database_id
|
124
124
|
# end
|
125
125
|
#
|
126
|
-
def all request_limit: nil
|
126
|
+
def all request_limit: nil, &block
|
127
127
|
request_limit = request_limit.to_i if request_limit
|
128
128
|
unless block_given?
|
129
129
|
return enum_for :all, request_limit: request_limit
|
130
130
|
end
|
131
131
|
results = self
|
132
132
|
loop do
|
133
|
-
results.each
|
133
|
+
results.each(&block)
|
134
134
|
if request_limit
|
135
135
|
request_limit -= 1
|
136
|
-
break if request_limit
|
136
|
+
break if request_limit.negative?
|
137
137
|
end
|
138
138
|
break unless results.next?
|
139
139
|
results = results.next
|
@@ -133,13 +133,14 @@ module Google
|
|
133
133
|
#
|
134
134
|
def types
|
135
135
|
@grpc_fields.map(&:type).map do |type|
|
136
|
-
|
136
|
+
case type.code
|
137
|
+
when :ARRAY
|
137
138
|
if type.array_element_type.code == :STRUCT
|
138
139
|
[Fields.from_grpc(type.array_element_type.struct_type.fields)]
|
139
140
|
else
|
140
141
|
[type.array_element_type.code]
|
141
142
|
end
|
142
|
-
|
143
|
+
when :STRUCT
|
143
144
|
Fields.from_grpc type.struct_type.fields
|
144
145
|
else
|
145
146
|
type.code
|
@@ -73,7 +73,7 @@ module Google
|
|
73
73
|
return nil unless next?
|
74
74
|
ensure_service!
|
75
75
|
options = { token: token, max: @max }
|
76
|
-
grpc = @service.list_instance_configs
|
76
|
+
grpc = @service.list_instance_configs(**options)
|
77
77
|
self.class.from_grpc grpc, @service, @max
|
78
78
|
end
|
79
79
|
|
@@ -123,17 +123,17 @@ module Google
|
|
123
123
|
# puts config.instance_config_id
|
124
124
|
# end
|
125
125
|
#
|
126
|
-
def all request_limit: nil
|
126
|
+
def all request_limit: nil, &block
|
127
127
|
request_limit = request_limit.to_i if request_limit
|
128
128
|
unless block_given?
|
129
129
|
return enum_for :all, request_limit: request_limit
|
130
130
|
end
|
131
131
|
results = self
|
132
132
|
loop do
|
133
|
-
results.each
|
133
|
+
results.each(&block)
|
134
134
|
if request_limit
|
135
135
|
request_limit -= 1
|
136
|
-
break if request_limit
|
136
|
+
break if request_limit.negative?
|
137
137
|
end
|
138
138
|
break unless results.next?
|
139
139
|
results = results.next
|
@@ -71,7 +71,7 @@ module Google
|
|
71
71
|
return nil unless next?
|
72
72
|
ensure_service!
|
73
73
|
options = { token: token, max: @max }
|
74
|
-
grpc = @service.list_instances
|
74
|
+
grpc = @service.list_instances(**options)
|
75
75
|
self.class.from_grpc grpc, @service, @max
|
76
76
|
end
|
77
77
|
|
@@ -120,17 +120,17 @@ module Google
|
|
120
120
|
# puts instance.instance_id
|
121
121
|
# end
|
122
122
|
#
|
123
|
-
def all request_limit: nil
|
123
|
+
def all request_limit: nil, &block
|
124
124
|
request_limit = request_limit.to_i if request_limit
|
125
125
|
unless block_given?
|
126
126
|
return enum_for :all, request_limit: request_limit
|
127
127
|
end
|
128
128
|
results = self
|
129
129
|
loop do
|
130
|
-
results.each
|
130
|
+
results.each(&block)
|
131
131
|
if request_limit
|
132
132
|
request_limit -= 1
|
133
|
-
break if request_limit
|
133
|
+
break if request_limit.negative?
|
134
134
|
end
|
135
135
|
break unless results.next?
|
136
136
|
results = results.next
|
@@ -45,11 +45,13 @@ module Google
|
|
45
45
|
#
|
46
46
|
class Partition
|
47
47
|
# @ private
|
48
|
-
attr_reader :execute
|
48
|
+
attr_reader :execute
|
49
|
+
attr_reader :read
|
49
50
|
|
50
51
|
##
|
51
52
|
# @private Creates a Partition object.
|
52
|
-
def initialize
|
53
|
+
def initialize
|
54
|
+
end
|
53
55
|
|
54
56
|
##
|
55
57
|
# Whether the partition was created for an execute_query/query
|
@@ -70,7 +70,8 @@ module Google
|
|
70
70
|
# end
|
71
71
|
#
|
72
72
|
class Policy
|
73
|
-
attr_reader :etag
|
73
|
+
attr_reader :etag
|
74
|
+
attr_reader :roles
|
74
75
|
|
75
76
|
##
|
76
77
|
# @private Creates a Policy object.
|
@@ -169,7 +170,7 @@ module Google
|
|
169
170
|
role: role_name,
|
170
171
|
members: roles[role_name]
|
171
172
|
)
|
172
|
-
end
|
173
|
+
end.compact
|
173
174
|
)
|
174
175
|
end
|
175
176
|
|
@@ -29,7 +29,9 @@ module Google
|
|
29
29
|
# {Google::Cloud::Spanner::Session} instances.
|
30
30
|
#
|
31
31
|
class Pool
|
32
|
-
attr_accessor :all_sessions
|
32
|
+
attr_accessor :all_sessions
|
33
|
+
attr_accessor :session_queue
|
34
|
+
attr_accessor :transaction_queue
|
33
35
|
|
34
36
|
def initialize client, min: 10, max: 100, keepalive: 1800,
|
35
37
|
write_ratio: 0.3, fail: true, threads: nil
|
@@ -38,7 +40,7 @@ module Google
|
|
38
40
|
@max = max
|
39
41
|
@keepalive = keepalive
|
40
42
|
@write_ratio = write_ratio
|
41
|
-
@write_ratio = 0 if write_ratio
|
43
|
+
@write_ratio = 0 if write_ratio.negative?
|
42
44
|
@write_ratio = 1 if write_ratio > 1
|
43
45
|
@fail = fail
|
44
46
|
@threads = threads || [2, Concurrent.processor_count * 2].max
|
@@ -143,13 +145,13 @@ module Google
|
|
143
145
|
return new_transaction! if action == :new
|
144
146
|
end
|
145
147
|
|
146
|
-
def checkin_transaction
|
148
|
+
def checkin_transaction txn
|
147
149
|
@mutex.synchronize do
|
148
|
-
unless all_sessions.include?
|
150
|
+
unless all_sessions.include? txn.session
|
149
151
|
raise ArgumentError, "Cannot checkin session"
|
150
152
|
end
|
151
153
|
|
152
|
-
transaction_queue.push
|
154
|
+
transaction_queue.push txn
|
153
155
|
|
154
156
|
@resource.signal
|
155
157
|
end
|
@@ -182,7 +184,7 @@ module Google
|
|
182
184
|
@mutex.synchronize do
|
183
185
|
available_count = session_queue.count + transaction_queue.count
|
184
186
|
release_count = @min - available_count
|
185
|
-
release_count = 0 if release_count
|
187
|
+
release_count = 0 if release_count.negative?
|
186
188
|
|
187
189
|
to_keepalive += (session_queue + transaction_queue).select do |x|
|
188
190
|
x.idle_since? @keepalive
|
@@ -282,10 +284,8 @@ module Google
|
|
282
284
|
@keepalive_task.execute
|
283
285
|
end
|
284
286
|
|
285
|
-
def future
|
286
|
-
Concurrent::Future.new
|
287
|
-
yield
|
288
|
-
end.execute
|
287
|
+
def future &block
|
288
|
+
Concurrent::Future.new(executor: @thread_pool, &block).execute
|
289
289
|
end
|
290
290
|
end
|
291
291
|
end
|
@@ -251,14 +251,14 @@ module Google
|
|
251
251
|
@service.execute_streaming_sql(
|
252
252
|
@session_path,
|
253
253
|
@sql,
|
254
|
-
|
254
|
+
**@execute_query_options.merge(resume_token: resume_token)
|
255
255
|
)
|
256
256
|
else
|
257
257
|
@service.streaming_read_table(
|
258
258
|
@session_path,
|
259
259
|
@table,
|
260
260
|
@columns,
|
261
|
-
|
261
|
+
**@read_options.merge(resume_token: resume_token)
|
262
262
|
)
|
263
263
|
end
|
264
264
|
end
|
@@ -268,9 +268,9 @@ module Google
|
|
268
268
|
# Retries a request, by re-executing it from scratch.
|
269
269
|
def retry_request
|
270
270
|
if @execute_query_options
|
271
|
-
@service.execute_streaming_sql @session_path, @sql,
|
271
|
+
@service.execute_streaming_sql @session_path, @sql, **@execute_query_options
|
272
272
|
else
|
273
|
-
@service.streaming_read_table @session_path, @table, @columns,
|
273
|
+
@service.streaming_read_table @session_path, @table, @columns, **@read_options
|
274
274
|
end
|
275
275
|
end
|
276
276
|
|
@@ -326,7 +326,7 @@ module Google
|
|
326
326
|
query_options: query_options, call_options: call_options
|
327
327
|
}
|
328
328
|
enum = service.execute_streaming_sql session_path, sql,
|
329
|
-
execute_query_options
|
329
|
+
**execute_query_options
|
330
330
|
from_enum(enum, service).tap do |results|
|
331
331
|
results.instance_variable_set :@session_path, session_path
|
332
332
|
results.instance_variable_set :@sql, sql
|
@@ -346,7 +346,7 @@ module Google
|
|
346
346
|
call_options: call_options
|
347
347
|
}
|
348
348
|
enum = service.streaming_read_table \
|
349
|
-
session_path, table, columns, read_options
|
349
|
+
session_path, table, columns, **read_options
|
350
350
|
from_enum(enum, service).tap do |results|
|
351
351
|
results.instance_variable_set :@session_path, session_path
|
352
352
|
results.instance_variable_set :@table, table
|
@@ -28,8 +28,12 @@ module Google
|
|
28
28
|
# @private Represents the gRPC Spanner service, including all the API
|
29
29
|
# methods.
|
30
30
|
class Service
|
31
|
-
attr_accessor :project
|
32
|
-
|
31
|
+
attr_accessor :project
|
32
|
+
attr_accessor :credentials
|
33
|
+
attr_accessor :timeout
|
34
|
+
attr_accessor :host
|
35
|
+
attr_accessor :lib_name
|
36
|
+
attr_accessor :lib_version
|
33
37
|
|
34
38
|
##
|
35
39
|
# Creates a new Service instance.
|
@@ -639,7 +639,7 @@ module Google
|
|
639
639
|
commit_options: commit_options,
|
640
640
|
call_options: call_options
|
641
641
|
}
|
642
|
-
commit
|
642
|
+
commit(**opts) do |c|
|
643
643
|
c.upsert table, rows
|
644
644
|
end
|
645
645
|
end
|
@@ -728,7 +728,7 @@ module Google
|
|
728
728
|
commit_options: commit_options,
|
729
729
|
call_options: call_options
|
730
730
|
}
|
731
|
-
commit
|
731
|
+
commit(**opts) do |c|
|
732
732
|
c.insert table, rows
|
733
733
|
end
|
734
734
|
end
|
@@ -816,7 +816,7 @@ module Google
|
|
816
816
|
commit_options: commit_options,
|
817
817
|
call_options: call_options
|
818
818
|
}
|
819
|
-
commit
|
819
|
+
commit(**opts) do |c|
|
820
820
|
c.update table, rows
|
821
821
|
end
|
822
822
|
end
|
@@ -906,7 +906,7 @@ module Google
|
|
906
906
|
commit_options: commit_options,
|
907
907
|
call_options: call_options
|
908
908
|
}
|
909
|
-
commit
|
909
|
+
commit(**opts) do |c|
|
910
910
|
c.replace table, rows
|
911
911
|
end
|
912
912
|
end
|
@@ -974,7 +974,7 @@ module Google
|
|
974
974
|
commit_options: commit_options,
|
975
975
|
call_options: call_options
|
976
976
|
}
|
977
|
-
commit
|
977
|
+
commit(**opts) do |c|
|
978
978
|
c.delete table, keys
|
979
979
|
end
|
980
980
|
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.
|
4
|
+
version: 2.5.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-
|
12
|
+
date: 2021-03-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-cloud-core
|
@@ -87,14 +87,14 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version: 1.
|
90
|
+
version: 1.25.1
|
91
91
|
type: :development
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version: 1.
|
97
|
+
version: 1.25.1
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: minitest
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -227,28 +227,28 @@ dependencies:
|
|
227
227
|
requirements:
|
228
228
|
- - "~>"
|
229
229
|
- !ruby/object:Gem::Version
|
230
|
-
version: 1.
|
230
|
+
version: '1.36'
|
231
231
|
type: :development
|
232
232
|
prerelease: false
|
233
233
|
version_requirements: !ruby/object:Gem::Requirement
|
234
234
|
requirements:
|
235
235
|
- - "~>"
|
236
236
|
- !ruby/object:Gem::Version
|
237
|
-
version: 1.
|
237
|
+
version: '1.36'
|
238
238
|
- !ruby/object:Gem::Dependency
|
239
239
|
name: grpc-tools
|
240
240
|
requirement: !ruby/object:Gem::Requirement
|
241
241
|
requirements:
|
242
242
|
- - "~>"
|
243
243
|
- !ruby/object:Gem::Version
|
244
|
-
version: 1.
|
244
|
+
version: '1.36'
|
245
245
|
type: :development
|
246
246
|
prerelease: false
|
247
247
|
version_requirements: !ruby/object:Gem::Requirement
|
248
248
|
requirements:
|
249
249
|
- - "~>"
|
250
250
|
- !ruby/object:Gem::Version
|
251
|
-
version: 1.
|
251
|
+
version: '1.36'
|
252
252
|
description: google-cloud-spanner is the official library for Google Cloud Spanner
|
253
253
|
API.
|
254
254
|
email:
|
@@ -324,14 +324,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
324
324
|
requirements:
|
325
325
|
- - ">="
|
326
326
|
- !ruby/object:Gem::Version
|
327
|
-
version: '2.
|
327
|
+
version: '2.5'
|
328
328
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
329
329
|
requirements:
|
330
330
|
- - ">="
|
331
331
|
- !ruby/object:Gem::Version
|
332
332
|
version: '0'
|
333
333
|
requirements: []
|
334
|
-
rubygems_version: 3.2.
|
334
|
+
rubygems_version: 3.2.13
|
335
335
|
signing_key:
|
336
336
|
specification_version: 4
|
337
337
|
summary: API Client library for Google Cloud Spanner API
|