google-cloud-bigtable 0.6.1 → 1.0.1
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/AUTHENTICATION.md +4 -26
- data/CHANGELOG.md +85 -0
- data/CONTRIBUTING.md +1 -1
- data/OVERVIEW.md +388 -19
- data/lib/google-cloud-bigtable.rb +19 -22
- data/lib/google/bigtable/admin/v2/bigtable_table_admin_services_pb.rb +1 -1
- data/lib/google/bigtable/v2/bigtable_pb.rb +3 -0
- data/lib/google/bigtable/v2/bigtable_services_pb.rb +1 -1
- data/lib/google/cloud/bigtable.rb +11 -17
- data/lib/google/cloud/bigtable/admin.rb +1 -1
- data/lib/google/cloud/bigtable/admin/v2.rb +1 -1
- data/lib/google/cloud/bigtable/admin/v2/bigtable_table_admin_client.rb +1 -1
- data/lib/google/cloud/bigtable/admin/v2/doc/google/iam/v1/policy.rb +42 -21
- data/lib/google/cloud/bigtable/app_profile.rb +162 -96
- data/lib/google/cloud/bigtable/app_profile/job.rb +5 -8
- data/lib/google/cloud/bigtable/app_profile/list.rb +18 -12
- data/lib/google/cloud/bigtable/chunk_processor.rb +24 -36
- data/lib/google/cloud/bigtable/cluster.rb +45 -18
- data/lib/google/cloud/bigtable/cluster/job.rb +3 -7
- data/lib/google/cloud/bigtable/cluster/list.rb +22 -20
- data/lib/google/cloud/bigtable/column_family.rb +18 -231
- data/lib/google/cloud/bigtable/column_family_map.rb +426 -0
- data/lib/google/cloud/bigtable/column_range.rb +15 -7
- data/lib/google/cloud/bigtable/convert.rb +12 -4
- data/lib/google/cloud/bigtable/errors.rb +4 -1
- data/lib/google/cloud/bigtable/gc_rule.rb +188 -69
- data/lib/google/cloud/bigtable/instance.rb +209 -189
- data/lib/google/cloud/bigtable/instance/cluster_map.rb +17 -13
- data/lib/google/cloud/bigtable/instance/job.rb +6 -5
- data/lib/google/cloud/bigtable/instance/list.rb +18 -13
- data/lib/google/cloud/bigtable/longrunning_job.rb +7 -1
- data/lib/google/cloud/bigtable/mutation_entry.rb +36 -39
- data/lib/google/cloud/bigtable/mutation_operations.rb +90 -73
- data/lib/google/cloud/bigtable/policy.rb +9 -5
- data/lib/google/cloud/bigtable/project.rb +87 -196
- data/lib/google/cloud/bigtable/read_modify_write_rule.rb +15 -10
- data/lib/google/cloud/bigtable/read_operations.rb +42 -59
- data/lib/google/cloud/bigtable/routing_policy.rb +172 -0
- data/lib/google/cloud/bigtable/row.rb +32 -21
- data/lib/google/cloud/bigtable/row_filter.rb +80 -35
- data/lib/google/cloud/bigtable/row_filter/chain_filter.rb +119 -68
- data/lib/google/cloud/bigtable/row_filter/condition_filter.rb +8 -2
- data/lib/google/cloud/bigtable/row_filter/interleave_filter.rb +117 -66
- data/lib/google/cloud/bigtable/row_filter/simple_filter.rb +24 -9
- data/lib/google/cloud/bigtable/row_range.rb +5 -0
- data/lib/google/cloud/bigtable/rows_mutator.rb +14 -21
- data/lib/google/cloud/bigtable/rows_reader.rb +23 -18
- data/lib/google/cloud/bigtable/sample_row_key.rb +6 -3
- data/lib/google/cloud/bigtable/service.rb +200 -253
- data/lib/google/cloud/bigtable/status.rb +76 -0
- data/lib/google/cloud/bigtable/table.rb +158 -262
- data/lib/google/cloud/bigtable/table/cluster_state.rb +17 -6
- data/lib/google/cloud/bigtable/table/list.rb +16 -9
- data/lib/google/cloud/bigtable/v2.rb +1 -1
- data/lib/google/cloud/bigtable/v2/bigtable_client.rb +12 -12
- data/lib/google/cloud/bigtable/v2/doc/google/bigtable/v2/bigtable.rb +16 -13
- data/lib/google/cloud/bigtable/value_range.rb +19 -13
- data/lib/google/cloud/bigtable/version.rb +1 -1
- metadata +67 -25
- data/lib/google/cloud/bigtable/table/column_family_map.rb +0 -70
@@ -20,14 +20,16 @@ require "google/cloud/bigtable/instance/list"
|
|
20
20
|
require "google/cloud/bigtable/instance/cluster_map"
|
21
21
|
require "google/cloud/bigtable/app_profile"
|
22
22
|
require "google/cloud/bigtable/policy"
|
23
|
+
require "google/cloud/bigtable/routing_policy"
|
23
24
|
|
24
25
|
module Google
|
25
26
|
module Cloud
|
26
27
|
module Bigtable
|
28
|
+
##
|
27
29
|
# # Instance
|
28
30
|
#
|
29
31
|
# Represents a Bigtable instance. Instances are dedicated Bigtable
|
30
|
-
# storage resources that Bigtable tables.
|
32
|
+
# storage resources that contain Bigtable tables.
|
31
33
|
#
|
32
34
|
# See {Google::Cloud::Bigtable::Project#instances},
|
33
35
|
# {Google::Cloud::Bigtable::Project#instance}, and
|
@@ -40,11 +42,11 @@ module Google
|
|
40
42
|
#
|
41
43
|
# job = bigtable.create_instance(
|
42
44
|
# "my-instance",
|
43
|
-
# "Instance for user data",
|
45
|
+
# display_name: "Instance for user data",
|
44
46
|
# type: :DEVELOPMENT,
|
45
47
|
# labels: { "env" => "dev"}
|
46
48
|
# ) do |clusters|
|
47
|
-
# clusters.add("test-cluster", "us-east1-b"
|
49
|
+
# clusters.add("test-cluster", "us-east1-b") # nodes not allowed
|
48
50
|
# end
|
49
51
|
#
|
50
52
|
# job.done? #=> false
|
@@ -72,124 +74,148 @@ module Google
|
|
72
74
|
@service = service
|
73
75
|
end
|
74
76
|
|
75
|
-
|
77
|
+
##
|
78
|
+
# The unique identifier for the project to which the instance belongs.
|
76
79
|
#
|
77
80
|
# @return [String]
|
78
|
-
|
81
|
+
#
|
79
82
|
def project_id
|
80
83
|
@grpc.name.split("/")[1]
|
81
84
|
end
|
82
85
|
|
86
|
+
##
|
83
87
|
# The unique identifier for the instance.
|
84
88
|
#
|
85
89
|
# @return [String]
|
86
|
-
|
90
|
+
#
|
87
91
|
def instance_id
|
88
92
|
@grpc.name.split("/")[3]
|
89
93
|
end
|
90
94
|
|
91
|
-
|
95
|
+
##
|
96
|
+
# The descriptive name for the instance as it appears in UIs. Must be
|
92
97
|
# unique per project and between 4 and 30 characters long.
|
93
98
|
#
|
94
99
|
# @return [String]
|
95
|
-
|
100
|
+
#
|
96
101
|
def display_name
|
97
102
|
@grpc.display_name
|
98
103
|
end
|
99
104
|
|
100
|
-
|
105
|
+
##
|
106
|
+
# Updates the descriptive name for the instance as it appears in UIs.
|
101
107
|
# Can be changed at any time, but should be kept globally unique
|
102
108
|
# to avoid confusion.
|
103
109
|
#
|
104
|
-
# @param value [String] The descriptive name for
|
105
|
-
|
110
|
+
# @param value [String] The descriptive name for the instance.
|
111
|
+
#
|
106
112
|
def display_name= value
|
107
113
|
@grpc.display_name = value
|
108
114
|
end
|
109
115
|
|
116
|
+
##
|
110
117
|
# The full path for the instance resource. Values are of the form
|
111
118
|
# `projects/<project_id>/instances/<instance_id>`.
|
112
119
|
#
|
113
120
|
# @return [String]
|
114
|
-
|
121
|
+
#
|
115
122
|
def path
|
116
123
|
@grpc.name
|
117
124
|
end
|
118
125
|
|
126
|
+
##
|
119
127
|
# The current instance state. Possible values are `:CREATING`,
|
120
128
|
# `:READY`, `:STATE_NOT_KNOWN`.
|
121
129
|
#
|
122
130
|
# @return [Symbol]
|
123
|
-
|
131
|
+
#
|
124
132
|
def state
|
125
133
|
@grpc.state
|
126
134
|
end
|
127
135
|
|
136
|
+
##
|
128
137
|
# The instance has been successfully created and can serve requests
|
129
138
|
# to its tables.
|
130
139
|
#
|
131
140
|
# @return [Boolean]
|
132
|
-
|
141
|
+
#
|
133
142
|
def ready?
|
134
143
|
state == :READY
|
135
144
|
end
|
136
145
|
|
146
|
+
##
|
137
147
|
# The instance is currently being created and may be destroyed if the
|
138
148
|
# creation process encounters an error.
|
139
149
|
#
|
140
150
|
# @return [Boolean]
|
141
|
-
|
151
|
+
#
|
142
152
|
def creating?
|
143
153
|
state == :CREATING
|
144
154
|
end
|
145
155
|
|
146
|
-
|
147
|
-
# `:
|
156
|
+
##
|
157
|
+
# Instance type. Possible values include `:DEVELOPMENT` and `:PRODUCTION`.
|
148
158
|
#
|
149
159
|
# @return [Symbol]
|
150
|
-
|
160
|
+
#
|
151
161
|
def type
|
152
162
|
@grpc.type
|
153
163
|
end
|
154
164
|
|
165
|
+
##
|
155
166
|
# The instance is meant for development and testing purposes only; it has
|
156
167
|
# no performance or uptime guarantees and is not covered by SLA.
|
157
168
|
# After a development instance is created, it can be upgraded by
|
158
|
-
# updating the instance to type
|
169
|
+
# updating the instance to type `:PRODUCTION`. An instance created
|
159
170
|
# as a production instance cannot be changed to a development instance.
|
160
|
-
# When creating a development instance, `
|
161
|
-
# not be set.
|
171
|
+
# When creating a development instance, `nodes` on the cluster must
|
172
|
+
# not be set. (See {#create_cluster}.)
|
162
173
|
#
|
163
174
|
# @return [Boolean]
|
164
|
-
|
175
|
+
#
|
165
176
|
def development?
|
166
177
|
type == :DEVELOPMENT
|
167
178
|
end
|
168
179
|
|
169
|
-
|
170
|
-
#
|
180
|
+
##
|
181
|
+
# An instance meant for production use. Requires that `nodes` must be set
|
182
|
+
# on the cluster. (See {#create_cluster}.)
|
171
183
|
#
|
172
184
|
# @return [Boolean]
|
173
|
-
|
185
|
+
#
|
174
186
|
def production?
|
175
187
|
type == :PRODUCTION
|
176
188
|
end
|
177
189
|
|
178
|
-
|
190
|
+
##
|
191
|
+
# Sets the instance type.
|
179
192
|
#
|
180
|
-
# Valid values are `:DEVELOPMENT
|
193
|
+
# Valid values are `:DEVELOPMENT` and `:PRODUCTION`.
|
181
194
|
# After a development instance is created, it can be upgraded
|
182
|
-
# by updating the instance to type
|
195
|
+
# by updating the instance to type `:PRODUCTION`.
|
183
196
|
# An instance created as a production instance cannot be changed to a
|
184
197
|
# development instance.
|
185
198
|
#
|
186
199
|
# @param instance_type [Symbol]
|
187
|
-
|
200
|
+
#
|
201
|
+
# @example
|
202
|
+
# require "google/cloud/bigtable"
|
203
|
+
#
|
204
|
+
# bigtable = Google::Cloud::Bigtable.new
|
205
|
+
#
|
206
|
+
# instance = bigtable.instance("my-instance")
|
207
|
+
#
|
208
|
+
# instance.development? # true
|
209
|
+
# instance.type = :PRODUCTION
|
210
|
+
# instance.development? # false
|
211
|
+
# instance.production? # true
|
212
|
+
#
|
188
213
|
def type= instance_type
|
189
214
|
@grpc.type = instance_type
|
190
215
|
end
|
191
216
|
|
192
|
-
|
217
|
+
##
|
218
|
+
# Gets the Cloud Labels for the instance.
|
193
219
|
#
|
194
220
|
# Cloud Labels are a flexible and lightweight mechanism for organizing
|
195
221
|
# cloud resources into groups that reflect a customer's organizational
|
@@ -205,15 +231,16 @@ module Google
|
|
205
231
|
# * No more than 64 labels can be associated with a given resource.
|
206
232
|
#
|
207
233
|
# @return [Hash{String=>String}] The label keys and values in a hash.
|
208
|
-
|
234
|
+
#
|
209
235
|
def labels
|
210
236
|
@grpc.labels
|
211
237
|
end
|
212
238
|
|
213
|
-
|
239
|
+
##
|
240
|
+
# Sets the Cloud Labels for the instance.
|
214
241
|
#
|
215
242
|
# @param labels [Hash{String=>String}] The Cloud Labels.
|
216
|
-
|
243
|
+
#
|
217
244
|
def labels= labels
|
218
245
|
labels ||= {}
|
219
246
|
@grpc.labels = Google::Protobuf::Map.new(
|
@@ -222,10 +249,11 @@ module Google
|
|
222
249
|
)
|
223
250
|
end
|
224
251
|
|
225
|
-
|
252
|
+
##
|
253
|
+
# Updates the instance.
|
226
254
|
#
|
227
|
-
# Updatable attributes are
|
228
|
-
# * `display_name` - The descriptive name for
|
255
|
+
# Updatable attributes are:
|
256
|
+
# * `display_name` - The descriptive name for the instance.
|
229
257
|
# * `type` - `:DEVELOPMENT` type instance can be upgraded to `:PRODUCTION` instance.
|
230
258
|
# An instance created as a production instance cannot be changed to a development instance.
|
231
259
|
# * `labels` - Cloud Labels are a flexible and lightweight mechanism for organizing cloud resources.
|
@@ -233,6 +261,7 @@ module Google
|
|
233
261
|
# @return [Google::Cloud::Bigtable::Instance::Job]
|
234
262
|
# The job representing the long-running, asynchronous processing of
|
235
263
|
# an instance update operation.
|
264
|
+
#
|
236
265
|
# @example
|
237
266
|
# require "google/cloud/bigtable"
|
238
267
|
#
|
@@ -256,27 +285,27 @@ module Google
|
|
256
285
|
# puts instance.name
|
257
286
|
# puts instance.labels
|
258
287
|
# end
|
259
|
-
|
288
|
+
#
|
260
289
|
def save
|
261
290
|
ensure_service!
|
262
|
-
update_mask = Google::Protobuf::FieldMask.new
|
263
|
-
|
264
|
-
|
265
|
-
grpc = service.partial_update_instance(@grpc, update_mask)
|
266
|
-
Instance::Job.from_grpc(grpc, service)
|
291
|
+
update_mask = Google::Protobuf::FieldMask.new paths: ["labels", "display_name", "type"]
|
292
|
+
grpc = service.partial_update_instance @grpc, update_mask
|
293
|
+
Instance::Job.from_grpc grpc, service
|
267
294
|
end
|
268
295
|
alias update save
|
269
296
|
|
270
|
-
|
297
|
+
##
|
298
|
+
# Reloads instance data.
|
271
299
|
#
|
272
300
|
# @return [Google::Cloud::Bigtable::Instance]
|
273
|
-
|
301
|
+
#
|
274
302
|
def reload!
|
275
|
-
@grpc = service.get_instance
|
303
|
+
@grpc = service.get_instance instance_id
|
276
304
|
self
|
277
305
|
end
|
278
306
|
|
279
|
-
|
307
|
+
##
|
308
|
+
# Permanently deletes the instance from the project.
|
280
309
|
#
|
281
310
|
# @return [Boolean] Returns `true` if the instance was deleted.
|
282
311
|
#
|
@@ -287,23 +316,24 @@ module Google
|
|
287
316
|
#
|
288
317
|
# instance = bigtable.instance("my-instance")
|
289
318
|
# instance.delete
|
290
|
-
|
319
|
+
#
|
291
320
|
def delete
|
292
321
|
ensure_service!
|
293
|
-
service.delete_instance
|
322
|
+
service.delete_instance instance_id
|
294
323
|
true
|
295
324
|
end
|
296
325
|
|
297
|
-
|
326
|
+
##
|
327
|
+
# Lists the clusters in the instance.
|
298
328
|
#
|
299
|
-
#
|
300
|
-
#
|
329
|
+
# See {Google::Cloud::Bigtable::Cluster#delete} and
|
330
|
+
# {Google::Cloud::Bigtable::Cluster#save}.
|
301
331
|
#
|
302
332
|
# @param token [String] The `token` value returned by the last call to
|
303
333
|
# `clusters`; indicates that this is a continuation of a call
|
304
334
|
# and that the system should return the next page of data.
|
305
335
|
# @return [Array<Google::Cloud::Bigtable::Cluster>]
|
306
|
-
#
|
336
|
+
# See({Google::Cloud::Bigtable::Cluster::List})
|
307
337
|
#
|
308
338
|
# @example
|
309
339
|
# require "google/cloud/bigtable"
|
@@ -315,17 +345,18 @@ module Google
|
|
315
345
|
# instance.clusters.all do |cluster|
|
316
346
|
# puts cluster.cluster_id
|
317
347
|
# end
|
318
|
-
|
348
|
+
#
|
319
349
|
def clusters token: nil
|
320
350
|
ensure_service!
|
321
|
-
grpc = service.list_clusters
|
322
|
-
Cluster::List.from_grpc
|
351
|
+
grpc = service.list_clusters instance_id, token: token
|
352
|
+
Cluster::List.from_grpc grpc, service, instance_id: instance_id
|
323
353
|
end
|
324
354
|
|
325
|
-
|
355
|
+
##
|
356
|
+
# Gets a cluster in the instance.
|
326
357
|
#
|
327
|
-
#
|
328
|
-
#
|
358
|
+
# See {Google::Cloud::Bigtable::Cluster#delete} and
|
359
|
+
# {Google::Cloud::Bigtable::Cluster#save}.
|
329
360
|
#
|
330
361
|
# @param cluster_id [String] The unique ID of the requested cluster.
|
331
362
|
# @return [Google::Cloud::Bigtable::Cluster, nil]
|
@@ -339,20 +370,20 @@ module Google
|
|
339
370
|
#
|
340
371
|
# cluster = instance.cluster("my-instance-cluster")
|
341
372
|
# puts cluster.cluster_id
|
342
|
-
|
373
|
+
#
|
343
374
|
def cluster cluster_id
|
344
375
|
ensure_service!
|
345
|
-
grpc = service.get_cluster
|
346
|
-
Cluster.from_grpc
|
376
|
+
grpc = service.get_cluster instance_id, cluster_id
|
377
|
+
Cluster.from_grpc grpc, service
|
347
378
|
rescue Google::Cloud::NotFoundError
|
348
379
|
nil
|
349
380
|
end
|
350
381
|
|
351
|
-
|
382
|
+
##
|
383
|
+
# Creates a cluster in the instance.
|
352
384
|
#
|
353
385
|
# @param cluster_id [String]
|
354
|
-
# The ID to be used when referring to the new cluster within its instance
|
355
|
-
# e.g., just `mycluster`
|
386
|
+
# The ID to be used when referring to the new cluster within its instance.
|
356
387
|
# @param location [String]
|
357
388
|
# The location where this cluster's nodes and storage reside. For best
|
358
389
|
# performance, clients should be located as close as possible to this
|
@@ -391,24 +422,25 @@ module Google
|
|
391
422
|
# else
|
392
423
|
# cluster = job.cluster
|
393
424
|
# end
|
394
|
-
|
425
|
+
#
|
395
426
|
def create_cluster cluster_id, location, nodes: nil, storage_type: nil
|
396
427
|
ensure_service!
|
397
428
|
attrs = {
|
398
|
-
serve_nodes:
|
429
|
+
serve_nodes: nodes,
|
399
430
|
default_storage_type: storage_type,
|
400
|
-
location:
|
431
|
+
location: location
|
401
432
|
}.delete_if { |_, v| v.nil? }
|
402
433
|
|
403
|
-
cluster = Google::Bigtable::Admin::V2::Cluster.new
|
404
|
-
grpc = service.create_cluster
|
405
|
-
Cluster::Job.from_grpc
|
434
|
+
cluster = Google::Bigtable::Admin::V2::Cluster.new attrs
|
435
|
+
grpc = service.create_cluster instance_id, cluster_id, cluster
|
436
|
+
Cluster::Job.from_grpc grpc, service
|
406
437
|
end
|
407
438
|
|
408
|
-
|
439
|
+
##
|
440
|
+
# Lists all tables in the instance.
|
409
441
|
#
|
410
|
-
# See
|
411
|
-
#
|
442
|
+
# See {Google::Cloud::Bigtable::Table#delete} and
|
443
|
+
# {Google::Cloud::Bigtable::Table#save}.
|
412
444
|
#
|
413
445
|
# @return [Array<Google::Cloud::Bigtable::Table>]
|
414
446
|
# (See {Google::Cloud::Bigtable::Table::List})
|
@@ -425,22 +457,17 @@ module Google
|
|
425
457
|
# puts table.name
|
426
458
|
# end
|
427
459
|
#
|
428
|
-
# # Full view
|
429
|
-
# instance.tables(view: :FULL).all do |table|
|
430
|
-
# puts table.name
|
431
|
-
# puts table.column_families
|
432
|
-
# end
|
433
|
-
#
|
434
460
|
def tables
|
435
461
|
ensure_service!
|
436
|
-
grpc = service.list_tables
|
437
|
-
Table::List.from_grpc
|
462
|
+
grpc = service.list_tables instance_id
|
463
|
+
Table::List.from_grpc grpc, service
|
438
464
|
end
|
439
465
|
|
440
|
-
|
466
|
+
##
|
467
|
+
# Gets metadata information of a table in the instance.
|
441
468
|
#
|
442
469
|
# @param view [Symbol]
|
443
|
-
# The view to be applied to the returned tables' fields
|
470
|
+
# The view to be applied to the returned tables' fields.
|
444
471
|
# Defaults to `SCHEMA_VIEW` if unspecified.
|
445
472
|
# Valid view types are.
|
446
473
|
# * `:NAME_ONLY` - Only populates `name`
|
@@ -465,7 +492,6 @@ module Google
|
|
465
492
|
#
|
466
493
|
# instance = bigtable.instance("my-instance")
|
467
494
|
#
|
468
|
-
# # Default view is full view
|
469
495
|
# table = instance.table("my-table", perform_lookup: true)
|
470
496
|
# puts table.name
|
471
497
|
# puts table.column_families
|
@@ -474,7 +500,7 @@ module Google
|
|
474
500
|
# table = instance.table("my-table", view: :NAME_ONLY, perform_lookup: true)
|
475
501
|
# puts table.name
|
476
502
|
#
|
477
|
-
# @example Mutate rows
|
503
|
+
# @example Mutate rows.
|
478
504
|
# require "google/cloud/bigtable"
|
479
505
|
#
|
480
506
|
# bigtable = Google::Cloud::Bigtable.new
|
@@ -495,13 +521,10 @@ module Google
|
|
495
521
|
ensure_service!
|
496
522
|
|
497
523
|
table = if perform_lookup
|
498
|
-
grpc = service.get_table
|
499
|
-
Table.from_grpc
|
524
|
+
grpc = service.get_table instance_id, table_id, view: view
|
525
|
+
Table.from_grpc grpc, service, view: view
|
500
526
|
else
|
501
|
-
Table.from_path(
|
502
|
-
service.table_path(instance_id, table_id),
|
503
|
-
service
|
504
|
-
)
|
527
|
+
Table.from_path service.table_path(instance_id, table_id), service
|
505
528
|
end
|
506
529
|
|
507
530
|
table.app_profile_id = app_profile_id
|
@@ -510,17 +533,18 @@ module Google
|
|
510
533
|
nil
|
511
534
|
end
|
512
535
|
|
513
|
-
|
536
|
+
##
|
537
|
+
# Creates a new table in the instance.
|
514
538
|
#
|
515
539
|
# The table can be created with a full set of initial column families,
|
516
540
|
# specified in the request.
|
517
541
|
#
|
518
542
|
# @param name [String]
|
519
543
|
# The name by which the new table should be referred to within the parent
|
520
|
-
# instance
|
521
|
-
# @param column_families [
|
522
|
-
#
|
523
|
-
#
|
544
|
+
# instance.
|
545
|
+
# @param column_families [Google::Cloud::Bigtable::ColumnFamilyMap]
|
546
|
+
# An object containing the column families for the table, mapped by
|
547
|
+
# column family name.
|
524
548
|
# @param granularity [Symbol]
|
525
549
|
# The granularity at which timestamps are stored in this table.
|
526
550
|
# Timestamps not matching the granularity will be rejected.
|
@@ -544,15 +568,14 @@ module Google
|
|
544
568
|
# * Tablet 5 : `[other, ) => {"other", "zz"}`
|
545
569
|
# A hash in the form of `Google::Bigtable::Admin::V2::CreateTableRequest::Split`
|
546
570
|
# can also be provided.
|
547
|
-
# @yield [column_families] A block for adding
|
548
|
-
# @yieldparam [
|
549
|
-
#
|
550
|
-
#
|
551
|
-
# See rules for column families at {Google::Cloud::Bigtable::GcRule})
|
571
|
+
# @yield [column_families] A block for adding column families.
|
572
|
+
# @yieldparam [Google::Cloud::Bigtable::ColumnFamilyMap] column_families
|
573
|
+
# A mutable object containing the column families for the table,
|
574
|
+
# mapped by column family name.
|
552
575
|
#
|
553
576
|
# @return [Google::Cloud::Bigtable::Table]
|
554
577
|
#
|
555
|
-
# @example Create table without column families.
|
578
|
+
# @example Create a table without column families.
|
556
579
|
# require "google/cloud/bigtable"
|
557
580
|
#
|
558
581
|
# bigtable = Google::Cloud::Bigtable.new
|
@@ -562,64 +585,62 @@ module Google
|
|
562
585
|
# table = instance.create_table("my-table")
|
563
586
|
# puts table.name
|
564
587
|
#
|
565
|
-
# @example Create table with
|
588
|
+
# @example Create a table with initial splits and column families.
|
566
589
|
# require "google/cloud/bigtable"
|
567
590
|
#
|
568
591
|
# bigtable = Google::Cloud::Bigtable.new
|
569
592
|
#
|
570
593
|
# instance = bigtable.instance("my-instance")
|
571
594
|
#
|
572
|
-
#
|
573
|
-
#
|
574
|
-
#
|
595
|
+
# initial_splits = ["user-00001", "user-100000", "others"]
|
596
|
+
# table = instance.create_table("my-table", initial_splits: initial_splits) do |cfm|
|
597
|
+
# cfm.add('cf1', gc_rule: Google::Cloud::Bigtable::GcRule.max_versions(5))
|
598
|
+
# cfm.add('cf2', gc_rule: Google::Cloud::Bigtable::GcRule.max_age(600))
|
575
599
|
#
|
576
|
-
# gc_rule = Google::Cloud::Bigtable::GcRule.
|
577
|
-
# gc_rule.union = [
|
578
|
-
# Google::Cloud::Bigtable::GcRule.max_versions(3),
|
600
|
+
# gc_rule = Google::Cloud::Bigtable::GcRule.union(
|
579
601
|
# Google::Cloud::Bigtable::GcRule.max_age(1800),
|
580
|
-
#
|
581
|
-
#
|
602
|
+
# Google::Cloud::Bigtable::GcRule.max_versions(3)
|
603
|
+
# )
|
604
|
+
# cfm.add('cf3', gc_rule: gc_rule)
|
582
605
|
# end
|
583
606
|
#
|
584
607
|
# puts table
|
585
|
-
|
586
|
-
def create_table
|
587
|
-
name,
|
588
|
-
column_families: nil,
|
589
|
-
granularity: nil,
|
590
|
-
initial_splits: nil,
|
591
|
-
&block
|
608
|
+
#
|
609
|
+
def create_table name, column_families: nil, granularity: nil, initial_splits: nil, &block
|
592
610
|
ensure_service!
|
593
611
|
Table.create(
|
594
612
|
service,
|
595
613
|
instance_id,
|
596
614
|
name,
|
597
615
|
column_families: column_families,
|
598
|
-
granularity:
|
599
|
-
initial_splits:
|
616
|
+
granularity: granularity,
|
617
|
+
initial_splits: initial_splits,
|
600
618
|
&block
|
601
619
|
)
|
602
620
|
end
|
603
621
|
|
604
|
-
|
605
|
-
#
|
622
|
+
##
|
623
|
+
# Creates an app profile for the instance with a routing policy.
|
624
|
+
# Only one routing policy can applied to the app profile. The policy can be
|
606
625
|
# multi-cluster routing or single cluster routing.
|
607
626
|
#
|
608
|
-
# @param name [String] Unique
|
609
|
-
# @param routing_policy [Google::
|
610
|
-
# The routing policy for all read/write requests that use this app
|
611
|
-
# A value must be explicitly set.
|
627
|
+
# @param name [String] Unique ID of the app profile.
|
628
|
+
# @param routing_policy [Google::Cloud::Bigtable::RoutingPolicy]
|
629
|
+
# The routing policy for all read/write requests that use this app
|
630
|
+
# profile. A value must be explicitly set.
|
612
631
|
#
|
613
632
|
# Routing Policies:
|
614
|
-
# *
|
615
|
-
#
|
616
|
-
#
|
617
|
-
# read-your-writes
|
618
|
-
#
|
619
|
-
#
|
620
|
-
#
|
621
|
-
#
|
622
|
-
#
|
633
|
+
# * {Google::Cloud::Bigtable::MultiClusterRoutingUseAny} - Read/write
|
634
|
+
# requests may be routed to any cluster in the instance and will
|
635
|
+
# fail over to another cluster in the event of transient errors or
|
636
|
+
# delays. Choosing this option sacrifices read-your-writes
|
637
|
+
# consistency to improve availability.
|
638
|
+
# * {Google::Cloud::Bigtable::SingleClusterRouting} - Unconditionally
|
639
|
+
# routes all read/write requests to a specific cluster. This option
|
640
|
+
# preserves read-your-writes consistency but does not improve
|
641
|
+
# availability. Value contains `cluster_id` and optional field
|
642
|
+
# `allow_transactional_writes`.
|
643
|
+
# @param description [String] Description of the use case for this app profile.
|
623
644
|
# @param etag [String]
|
624
645
|
# Strongly validated etag for optimistic concurrency control. Preserve the
|
625
646
|
# value returned from `GetAppProfile` when calling `UpdateAppProfile` to
|
@@ -630,10 +651,10 @@ module Google
|
|
630
651
|
# [RFC 7232](https://tools.ietf.org/html/rfc7232#section-2.3) for more details.
|
631
652
|
# @param ignore_warnings [Boolean]
|
632
653
|
# If true, ignore safety checks when creating the app profile.
|
633
|
-
# Default value is `false
|
654
|
+
# Default value is `false`.
|
634
655
|
# @return [Google::Cloud::Bigtable::AppProfile]
|
635
656
|
#
|
636
|
-
# @example Create an app profile with a single cluster routing policy
|
657
|
+
# @example Create an app profile with a single cluster routing policy.
|
637
658
|
# require "google/cloud/bigtable"
|
638
659
|
#
|
639
660
|
# bigtable = Google::Cloud::Bigtable.new
|
@@ -641,18 +662,18 @@ module Google
|
|
641
662
|
# instance = bigtable.instance("my-instance")
|
642
663
|
#
|
643
664
|
# routing_policy = Google::Cloud::Bigtable::AppProfile.single_cluster_routing(
|
644
|
-
# "my-instance-cluster-1"
|
665
|
+
# "my-instance-cluster-1",
|
645
666
|
# allow_transactional_writes: true
|
646
667
|
# )
|
647
668
|
#
|
648
669
|
# app_profile = instance.create_app_profile(
|
649
670
|
# "my-app-profile",
|
650
|
-
# routing_policy
|
671
|
+
# routing_policy,
|
651
672
|
# description: "App profile for user data instance"
|
652
673
|
# )
|
653
674
|
# puts app_profile.name
|
654
675
|
#
|
655
|
-
# @example Create an app profile with multi-cluster routing policy
|
676
|
+
# @example Create an app profile with multi-cluster routing policy.
|
656
677
|
# require "google/cloud/bigtable"
|
657
678
|
#
|
658
679
|
# bigtable = Google::Cloud::Bigtable.new
|
@@ -684,27 +705,21 @@ module Google
|
|
684
705
|
# ignore_warnings: true
|
685
706
|
# )
|
686
707
|
# puts app_profile.name
|
687
|
-
|
688
|
-
def create_app_profile
|
689
|
-
name,
|
690
|
-
routing_policy,
|
691
|
-
description: nil,
|
692
|
-
etag: nil,
|
693
|
-
ignore_warnings: false
|
708
|
+
#
|
709
|
+
def create_app_profile name, routing_policy, description: nil, etag: nil, ignore_warnings: false
|
694
710
|
ensure_service!
|
695
|
-
|
696
|
-
if
|
697
|
-
|
698
|
-
multi_cluster_routing = routing_policy
|
711
|
+
routing_policy_grpc = routing_policy.to_grpc
|
712
|
+
if routing_policy_grpc.is_a? Google::Bigtable::Admin::V2::AppProfile::MultiClusterRoutingUseAny
|
713
|
+
multi_cluster_routing = routing_policy_grpc
|
699
714
|
else
|
700
|
-
single_cluster_routing =
|
715
|
+
single_cluster_routing = routing_policy_grpc
|
701
716
|
end
|
702
717
|
|
703
718
|
app_profile_attrs = {
|
704
719
|
multi_cluster_routing_use_any: multi_cluster_routing,
|
705
|
-
single_cluster_routing:
|
706
|
-
description:
|
707
|
-
etag:
|
720
|
+
single_cluster_routing: single_cluster_routing,
|
721
|
+
description: description,
|
722
|
+
etag: etag
|
708
723
|
}.delete_if { |_, v| v.nil? }
|
709
724
|
|
710
725
|
grpc = service.create_app_profile(
|
@@ -713,13 +728,14 @@ module Google
|
|
713
728
|
Google::Bigtable::Admin::V2::AppProfile.new(app_profile_attrs),
|
714
729
|
ignore_warnings: ignore_warnings
|
715
730
|
)
|
716
|
-
AppProfile.from_grpc
|
731
|
+
AppProfile.from_grpc grpc, service
|
717
732
|
end
|
718
733
|
|
719
|
-
|
734
|
+
##
|
735
|
+
# Gets an app profile in the instance.
|
720
736
|
#
|
721
|
-
#
|
722
|
-
#
|
737
|
+
# See {Google::Cloud::Bigtable::AppProfile#delete} and
|
738
|
+
# {Google::Cloud::Bigtable::AppProfile#save}.
|
723
739
|
#
|
724
740
|
# @param app_profile_id [String] The unique name of the requested app profile.
|
725
741
|
# @return [Google::Cloud::Bigtable::AppProfile, nil]
|
@@ -736,22 +752,23 @@ module Google
|
|
736
752
|
# if app_profile
|
737
753
|
# puts app_profile.name
|
738
754
|
# end
|
739
|
-
|
755
|
+
#
|
740
756
|
def app_profile app_profile_id
|
741
757
|
ensure_service!
|
742
|
-
grpc = service.get_app_profile
|
743
|
-
AppProfile.from_grpc
|
758
|
+
grpc = service.get_app_profile instance_id, app_profile_id
|
759
|
+
AppProfile.from_grpc grpc, service
|
744
760
|
rescue Google::Cloud::NotFoundError
|
745
761
|
nil
|
746
762
|
end
|
747
763
|
|
748
|
-
|
764
|
+
##
|
765
|
+
# Lists all app profiles in the instance.
|
749
766
|
#
|
750
|
-
#
|
751
|
-
#
|
767
|
+
# See {Google::Cloud::Bigtable::AppProfile#delete} and
|
768
|
+
# {Google::Cloud::Bigtable::AppProfile#save}.
|
752
769
|
#
|
753
770
|
# @return [Array<Google::Cloud::Bigtable::AppProfile>]
|
754
|
-
#
|
771
|
+
# (See {Google::Cloud::Bigtable::AppProfile::List})
|
755
772
|
#
|
756
773
|
# @example
|
757
774
|
# require "google/cloud/bigtable"
|
@@ -763,15 +780,16 @@ module Google
|
|
763
780
|
# instance.app_profiles.all do |app_profile|
|
764
781
|
# puts app_profile.name
|
765
782
|
# end
|
766
|
-
|
783
|
+
#
|
767
784
|
def app_profiles
|
768
785
|
ensure_service!
|
769
|
-
grpc = service.list_app_profiles
|
770
|
-
AppProfile::List.from_grpc
|
786
|
+
grpc = service.list_app_profiles instance_id
|
787
|
+
AppProfile::List.from_grpc grpc, service
|
771
788
|
end
|
772
789
|
|
790
|
+
##
|
773
791
|
# Gets the [Cloud IAM](https://cloud.google.com/iam/) access control
|
774
|
-
# policy for
|
792
|
+
# policy for the instance.
|
775
793
|
#
|
776
794
|
# @see https://cloud.google.com/bigtable/docs/access-control
|
777
795
|
#
|
@@ -780,9 +798,9 @@ module Google
|
|
780
798
|
# the block completes, the modified policy will be written to the
|
781
799
|
# service.
|
782
800
|
# @yieldparam [Policy] policy the current Cloud IAM Policy for this
|
783
|
-
# instance
|
801
|
+
# instance.
|
784
802
|
#
|
785
|
-
# @return [Policy] The current Cloud IAM Policy for
|
803
|
+
# @return [Policy] The current Cloud IAM Policy for the instance.
|
786
804
|
#
|
787
805
|
# @example
|
788
806
|
# require "google/cloud/bigtable"
|
@@ -792,8 +810,8 @@ module Google
|
|
792
810
|
# instance = bigtable.instance("my-instance")
|
793
811
|
# policy = instance.policy
|
794
812
|
#
|
795
|
-
# @example Update the policy by passing a block
|
796
|
-
# require "google/cloud/
|
813
|
+
# @example Update the policy by passing a block.
|
814
|
+
# require "google/cloud/bigtable"
|
797
815
|
#
|
798
816
|
# bigtable = Google::Cloud::Bigtable.new
|
799
817
|
# instance = bigtable.instance("my-instance")
|
@@ -801,18 +819,19 @@ module Google
|
|
801
819
|
# instance.policy do |p|
|
802
820
|
# p.add("roles/owner", "user:owner@example.com")
|
803
821
|
# end # 2 API calls
|
804
|
-
|
822
|
+
#
|
805
823
|
def policy
|
806
824
|
ensure_service!
|
807
|
-
grpc = service.get_instance_policy
|
808
|
-
policy = Policy.from_grpc
|
825
|
+
grpc = service.get_instance_policy instance_id
|
826
|
+
policy = Policy.from_grpc grpc
|
809
827
|
return policy unless block_given?
|
810
828
|
yield policy
|
811
829
|
update_policy policy
|
812
830
|
end
|
813
831
|
|
832
|
+
##
|
814
833
|
# Updates the [Cloud IAM](https://cloud.google.com/iam/) access control
|
815
|
-
# policy for
|
834
|
+
# policy for the instance. The policy should be read from {#policy}.
|
816
835
|
# See {Google::Cloud::Bigtable::Policy} for an explanation of the policy
|
817
836
|
# `etag` property and how to modify policies.
|
818
837
|
#
|
@@ -836,24 +855,25 @@ module Google
|
|
836
855
|
# updated_policy = instance.update_policy(policy)
|
837
856
|
#
|
838
857
|
# puts update_policy.roles
|
839
|
-
|
858
|
+
#
|
840
859
|
def update_policy new_policy
|
841
860
|
ensure_service!
|
842
|
-
grpc = service.set_instance_policy
|
843
|
-
Policy.from_grpc
|
861
|
+
grpc = service.set_instance_policy instance_id, new_policy.to_grpc
|
862
|
+
Policy.from_grpc grpc
|
844
863
|
end
|
845
864
|
alias policy= update_policy
|
846
865
|
|
866
|
+
##
|
847
867
|
# Tests the specified permissions against the [Cloud
|
848
868
|
# IAM](https://cloud.google.com/iam/) access control policy.
|
849
869
|
#
|
850
|
-
# @see https://cloud.google.com/iam/docs/managing-policies Managing
|
851
|
-
#
|
870
|
+
# @see https://cloud.google.com/iam/docs/managing-policies Managing Policies
|
871
|
+
# @see https://cloud.google.com/bigtable/docs/access-control Access Control
|
852
872
|
#
|
853
873
|
# @param permissions [String, Array<String>] permissions The set of permissions to
|
854
874
|
# check access for. Permissions with wildcards (such as `*` or
|
855
875
|
# `bigtable.*`) are not allowed.
|
856
|
-
# See (https://cloud.google.com/bigtable/docs/access-control)
|
876
|
+
# See [Access Control](https://cloud.google.com/bigtable/docs/access-control).
|
857
877
|
#
|
858
878
|
# Some of the permissions that can be checked on a instance are:
|
859
879
|
# * bigtable.instances.create
|
@@ -873,13 +893,13 @@ module Google
|
|
873
893
|
#
|
874
894
|
# instance = bigtable.instance("my-instance")
|
875
895
|
#
|
876
|
-
# permissions =
|
896
|
+
# permissions = instance.test_iam_permissions(
|
877
897
|
# "bigtable.instances.get",
|
878
898
|
# "bigtable.instances.update"
|
879
899
|
# )
|
880
900
|
# permissions.include? "bigtable.instances.get" #=> true
|
881
901
|
# permissions.include? "bigtable.instances.update" #=> false
|
882
|
-
|
902
|
+
#
|
883
903
|
def test_iam_permissions *permissions
|
884
904
|
ensure_service!
|
885
905
|
grpc = service.test_instance_permissions(
|
@@ -897,9 +917,9 @@ module Google
|
|
897
917
|
# @param grpc [Google::Bigtable::Admin::V2::Instance]
|
898
918
|
# @param service [Google::Cloud::Bigtable::Service]
|
899
919
|
# @return [Google::Cloud::Bigtable::Instance]
|
900
|
-
|
920
|
+
#
|
901
921
|
def self.from_grpc grpc, service
|
902
|
-
new
|
922
|
+
new grpc, service
|
903
923
|
end
|
904
924
|
|
905
925
|
protected
|
@@ -908,7 +928,7 @@ module Google
|
|
908
928
|
#
|
909
929
|
# Raise an error unless an active connection to the service is
|
910
930
|
# available.
|
911
|
-
|
931
|
+
#
|
912
932
|
def ensure_service!
|
913
933
|
raise "Must have active connection to service" unless service
|
914
934
|
end
|