google-cloud-bigtable 0.6.1 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/AUTHENTICATION.md +4 -26
  3. data/CHANGELOG.md +85 -0
  4. data/CONTRIBUTING.md +1 -1
  5. data/OVERVIEW.md +388 -19
  6. data/lib/google-cloud-bigtable.rb +19 -22
  7. data/lib/google/bigtable/admin/v2/bigtable_table_admin_services_pb.rb +1 -1
  8. data/lib/google/bigtable/v2/bigtable_pb.rb +3 -0
  9. data/lib/google/bigtable/v2/bigtable_services_pb.rb +1 -1
  10. data/lib/google/cloud/bigtable.rb +11 -17
  11. data/lib/google/cloud/bigtable/admin.rb +1 -1
  12. data/lib/google/cloud/bigtable/admin/v2.rb +1 -1
  13. data/lib/google/cloud/bigtable/admin/v2/bigtable_table_admin_client.rb +1 -1
  14. data/lib/google/cloud/bigtable/admin/v2/doc/google/iam/v1/policy.rb +42 -21
  15. data/lib/google/cloud/bigtable/app_profile.rb +162 -96
  16. data/lib/google/cloud/bigtable/app_profile/job.rb +5 -8
  17. data/lib/google/cloud/bigtable/app_profile/list.rb +18 -12
  18. data/lib/google/cloud/bigtable/chunk_processor.rb +24 -36
  19. data/lib/google/cloud/bigtable/cluster.rb +45 -18
  20. data/lib/google/cloud/bigtable/cluster/job.rb +3 -7
  21. data/lib/google/cloud/bigtable/cluster/list.rb +22 -20
  22. data/lib/google/cloud/bigtable/column_family.rb +18 -231
  23. data/lib/google/cloud/bigtable/column_family_map.rb +426 -0
  24. data/lib/google/cloud/bigtable/column_range.rb +15 -7
  25. data/lib/google/cloud/bigtable/convert.rb +12 -4
  26. data/lib/google/cloud/bigtable/errors.rb +4 -1
  27. data/lib/google/cloud/bigtable/gc_rule.rb +188 -69
  28. data/lib/google/cloud/bigtable/instance.rb +209 -189
  29. data/lib/google/cloud/bigtable/instance/cluster_map.rb +17 -13
  30. data/lib/google/cloud/bigtable/instance/job.rb +6 -5
  31. data/lib/google/cloud/bigtable/instance/list.rb +18 -13
  32. data/lib/google/cloud/bigtable/longrunning_job.rb +7 -1
  33. data/lib/google/cloud/bigtable/mutation_entry.rb +36 -39
  34. data/lib/google/cloud/bigtable/mutation_operations.rb +90 -73
  35. data/lib/google/cloud/bigtable/policy.rb +9 -5
  36. data/lib/google/cloud/bigtable/project.rb +87 -196
  37. data/lib/google/cloud/bigtable/read_modify_write_rule.rb +15 -10
  38. data/lib/google/cloud/bigtable/read_operations.rb +42 -59
  39. data/lib/google/cloud/bigtable/routing_policy.rb +172 -0
  40. data/lib/google/cloud/bigtable/row.rb +32 -21
  41. data/lib/google/cloud/bigtable/row_filter.rb +80 -35
  42. data/lib/google/cloud/bigtable/row_filter/chain_filter.rb +119 -68
  43. data/lib/google/cloud/bigtable/row_filter/condition_filter.rb +8 -2
  44. data/lib/google/cloud/bigtable/row_filter/interleave_filter.rb +117 -66
  45. data/lib/google/cloud/bigtable/row_filter/simple_filter.rb +24 -9
  46. data/lib/google/cloud/bigtable/row_range.rb +5 -0
  47. data/lib/google/cloud/bigtable/rows_mutator.rb +14 -21
  48. data/lib/google/cloud/bigtable/rows_reader.rb +23 -18
  49. data/lib/google/cloud/bigtable/sample_row_key.rb +6 -3
  50. data/lib/google/cloud/bigtable/service.rb +200 -253
  51. data/lib/google/cloud/bigtable/status.rb +76 -0
  52. data/lib/google/cloud/bigtable/table.rb +158 -262
  53. data/lib/google/cloud/bigtable/table/cluster_state.rb +17 -6
  54. data/lib/google/cloud/bigtable/table/list.rb +16 -9
  55. data/lib/google/cloud/bigtable/v2.rb +1 -1
  56. data/lib/google/cloud/bigtable/v2/bigtable_client.rb +12 -12
  57. data/lib/google/cloud/bigtable/v2/doc/google/bigtable/v2/bigtable.rb +16 -13
  58. data/lib/google/cloud/bigtable/value_range.rb +19 -13
  59. data/lib/google/cloud/bigtable/version.rb +1 -1
  60. metadata +67 -25
  61. data/lib/google/cloud/bigtable/table/column_family_map.rb +0 -70
@@ -19,15 +19,19 @@ module Google
19
19
  module Cloud
20
20
  module Bigtable
21
21
  module RowFilter
22
+ ##
22
23
  # # ChainFilter
23
24
  #
24
25
  # A RowFilter that sends rows through several RowFilters in sequence.
25
26
  #
26
27
  # The elements of "filters" are chained together to process the input row:
27
- # in row -> f(0) -> intermediate row -> f(1) -> ... -> f(N) -> out row
28
+ #
29
+ # in row -> f(0) -> intermediate row -> f(1) -> ... -> f(N) -> out row
30
+ #
28
31
  # The full chain is executed atomically.
29
32
  #
30
33
  # @example
34
+ # require "google/cloud/bigtable"
31
35
  #
32
36
  # chain = Google::Cloud::Bigtable::RowFilter.chain
33
37
  # # Add filters to chain filter
@@ -37,15 +41,18 @@ module Google
37
41
  # @private
38
42
  # Creates an instance of a chain filter.
39
43
  def initialize
40
- @grpc = Google::Bigtable::V2::RowFilter::Chain.new
44
+ @filters = []
41
45
  end
42
46
 
43
- # Adds a chain filter instance.
47
+ ##
48
+ # Adds a chain filter.
44
49
  #
45
50
  # A Chain RowFilter that sends rows through several RowFilters in sequence.
46
51
  #
47
52
  # The elements of "filters" are chained together to process the input row:
48
- # in row -> f(0) -> intermediate row -> f(1) -> ... -> f(N) -> out row
53
+ #
54
+ # in row -> f(0) -> intermediate row -> f(1) -> ... -> f(N) -> out row
55
+ #
49
56
  # The full chain is executed atomically.
50
57
  #
51
58
  # @param filter [SimpleFilter, ChainFilter, InterleaveFilter, ConditionFilter]
@@ -53,6 +60,7 @@ module Google
53
60
  # `self` instance of chain filter.
54
61
  #
55
62
  # @example Create a chain filter and add a chain filter.
63
+ # require "google/cloud/bigtable"
56
64
  #
57
65
  # chain_1 = Google::Cloud::Bigtable::RowFilter.chain
58
66
  #
@@ -66,13 +74,12 @@ module Google
66
74
  # filter = Google::Cloud::Bigtable::RowFilter.chain.chain(chain_1)
67
75
  #
68
76
  def chain filter
69
- unless filter.instance_of?(ChainFilter)
70
- raise RowFilterError, "Filter type must be ChainFilter"
71
- end
72
- add(filter)
77
+ raise RowFilterError, "Filter type must be ChainFilter" unless filter.instance_of? ChainFilter
78
+ add filter
73
79
  end
74
80
 
75
- # Add interleave filter.
81
+ ##
82
+ # Adds an interleave filter.
76
83
  #
77
84
  # A RowFilter that sends each row to each of several component
78
85
  # RowFilters and interleaves the results.
@@ -109,7 +116,8 @@ module Google
109
116
  # @return [Google::Cloud::Bigtable::RowFilter::ChainFilter]
110
117
  # `self` instance of chain filter.
111
118
  #
112
- # @example Add interleave filter to chain filter
119
+ # @example Add an interleave filter to the chain filter.
120
+ # require "google/cloud/bigtable"
113
121
  #
114
122
  # interleave = Google::Cloud::Bigtable::RowFilter.interleave
115
123
  #
@@ -119,13 +127,12 @@ module Google
119
127
  # chain = Google::Cloud::Bigtable::RowFilter.chain.interleave(interleave)
120
128
  #
121
129
  def interleave filter
122
- unless filter.instance_of?(InterleaveFilter)
123
- raise RowFilterError, "Filter type must be InterleaveFilter"
124
- end
125
- add(filter)
130
+ raise RowFilterError, "Filter type must be InterleaveFilter" unless filter.instance_of? InterleaveFilter
131
+ add filter
126
132
  end
127
133
 
128
- # Adds a condition filter instance.
134
+ ##
135
+ # Adds a condition filter.
129
136
  #
130
137
  # A RowFilter that evaluates one of two possible RowFilters, depending on
131
138
  # whether or not a predicate RowFilter outputs any cells from the input row.
@@ -142,24 +149,25 @@ module Google
142
149
  # `self` instance of chain filter.
143
150
  #
144
151
  # @example
152
+ # require "google/cloud/bigtable"
145
153
  #
146
154
  # predicate = Google::Cloud::Bigtable::RowFilter.key("user-*")
147
155
  #
148
156
  # label = Google::Cloud::Bigtable::RowFilter.label("user")
149
157
  # strip_value = Google::Cloud::Bigtable::RowFilter.strip_value
150
158
  #
151
- # condition_filter = Google::Cloud::Bigtable::RowFilter.condition(predicate).on_match(label).otherwise(strip_value)
159
+ # condition_filter = Google::Cloud::Bigtable::RowFilter.
160
+ # condition(predicate).on_match(label).otherwise(strip_value)
152
161
  #
153
162
  # filter = Google::Cloud::Bigtable::RowFilter.chain.condition(condition_filter)
154
163
  #
155
164
  def condition filter
156
- unless filter.instance_of?(ConditionFilter)
157
- raise RowFilterError, "Filter type must be ConditionFilter"
158
- end
159
- add(filter)
165
+ raise RowFilterError, "Filter type must be ConditionFilter" unless filter.instance_of? ConditionFilter
166
+ add filter
160
167
  end
161
168
 
162
- # Adds a pass filter instance.
169
+ ##
170
+ # Adds a pass filter.
163
171
  #
164
172
  # Matches all cells, regardless of input. Functionally equivalent to
165
173
  # leaving `filter` unset, but included for completeness.
@@ -168,14 +176,16 @@ module Google
168
176
  # `self` instance of chain filter.
169
177
  #
170
178
  # @example
179
+ # require "google/cloud/bigtable"
171
180
  #
172
181
  # filter = Google::Cloud::Bigtable::RowFilter.chain.pass
173
182
  #
174
183
  def pass
175
- add(RowFilter.pass)
184
+ add RowFilter.pass
176
185
  end
177
186
 
178
- # Adds a block-all filter instance.
187
+ ##
188
+ # Adds a block-all filter.
179
189
  #
180
190
  # Does not match any cells, regardless of input. Useful for temporarily
181
191
  # disabling just part of a filter.
@@ -184,14 +194,16 @@ module Google
184
194
  # `self` instance of chain filter.
185
195
  #
186
196
  # @example
197
+ # require "google/cloud/bigtable"
187
198
  #
188
199
  # filter = Google::Cloud::Bigtable::RowFilter.chain.block
189
200
  #
190
201
  def block
191
- add(RowFilter.block)
202
+ add RowFilter.block
192
203
  end
193
204
 
194
- # Adds a sink filter instance.
205
+ ##
206
+ # Adds a sink filter.
195
207
  #
196
208
  # Outputs all cells directly to the output of the read rather than to any parent filter.
197
209
  #
@@ -199,14 +211,16 @@ module Google
199
211
  # `self` instance of chain filter.
200
212
  #
201
213
  # @example
214
+ # require "google/cloud/bigtable"
202
215
  #
203
216
  # filter = Google::Cloud::Bigtable::RowFilter.chain.sink
204
217
  #
205
218
  def sink
206
- add(RowFilter.sink)
219
+ add RowFilter.sink
207
220
  end
208
221
 
209
- # Adds a strip-value filter instance.
222
+ ##
223
+ # Adds a strip-value filter.
210
224
  #
211
225
  # Replaces each cell's value with an empty string.
212
226
  #
@@ -214,13 +228,15 @@ module Google
214
228
  # `self` instance of chain filter.
215
229
  #
216
230
  # @example
231
+ # require "google/cloud/bigtable"
217
232
  #
218
233
  # filter = Google::Cloud::Bigtable::RowFilter.chain.strip_value
219
234
  #
220
235
  def strip_value
221
- add(RowFilter.strip_value)
236
+ add RowFilter.strip_value
222
237
  end
223
238
 
239
+ ##
224
240
  # Adds a key-filter instance to match keys using a regular expression.
225
241
  #
226
242
  # Matches only cells from rows whose keys satisfy the given RE2 regex. In
@@ -239,31 +255,35 @@ module Google
239
255
  # `self` instance of chain filter.
240
256
  #
241
257
  # @example
258
+ # require "google/cloud/bigtable"
242
259
  #
243
260
  # filter = Google::Cloud::Bigtable::RowFilter.chain.key("user-*")
244
261
  #
245
262
  def key regex
246
- add(RowFilter.key(regex))
263
+ add RowFilter.key(regex)
247
264
  end
248
265
 
249
- # Adds a sample-probability filter instance.
266
+ ##
267
+ # Adds a sample-probability filter.
250
268
  #
251
269
  # Matches all cells from a row with probability p, and matches no cells
252
270
  # from the row with probability 1-p.
253
271
  #
254
- # @param probability [Float] Probability value
255
- # Probability must be greather then 0 and less then 1.0.
272
+ # @param probability [Float] Probability value.
273
+ # Probability must be greater than 0 and less than 1.0.
256
274
  # @return [Google::Cloud::Bigtable::RowFilter::ChainFilter]
257
275
  # `self` instance of chain filter.
258
276
  #
259
277
  # @example
278
+ # require "google/cloud/bigtable"
260
279
  #
261
280
  # filter = Google::Cloud::Bigtable::RowFilter.chain.sample(0.5)
262
281
  #
263
282
  def sample probability
264
- add(RowFilter.sample(probability))
283
+ add RowFilter.sample(probability)
265
284
  end
266
285
 
286
+ ##
267
287
  # Adds a family-name-match filter using a regular expression.
268
288
  #
269
289
  # Matches only cells from columns whose families satisfy the given RE2
@@ -281,14 +301,16 @@ module Google
281
301
  # `self` instance of chain filter.
282
302
  #
283
303
  # @example
304
+ # require "google/cloud/bigtable"
284
305
  #
285
306
  # filter = Google::Cloud::Bigtable::RowFilter.chain.family("cf-*")
286
307
  #
287
308
  def family regex
288
- add(RowFilter.family(regex))
309
+ add RowFilter.family(regex)
289
310
  end
290
311
 
291
- # Add a column-qualifier-match filter using a regular expression.
312
+ ##
313
+ # Adds a column-qualifier-match filter using a regular expression.
292
314
  #
293
315
  # Matches only cells from columns whose qualifiers satisfy the given RE2
294
316
  # regex.
@@ -305,13 +327,15 @@ module Google
305
327
  # `self` instance of chain filter.
306
328
  #
307
329
  # @example
330
+ # require "google/cloud/bigtable"
308
331
  #
309
332
  # filter = Google::Cloud::Bigtable::RowFilter.chain.qualifier("user-name*")
310
333
  #
311
334
  def qualifier regex
312
- add(RowFilter.qualifier(regex))
335
+ add RowFilter.qualifier(regex)
313
336
  end
314
337
 
338
+ ##
315
339
  # Adds a value-match filter using a regular expression.
316
340
  #
317
341
  # Matches only cells with values that satisfy the given regular expression.
@@ -328,13 +352,15 @@ module Google
328
352
  # `self` instance of chain filter.
329
353
  #
330
354
  # @example
355
+ # require "google/cloud/bigtable"
331
356
  #
332
357
  # filter = Google::Cloud::Bigtable::RowFilter.chain.value("abc*")
333
358
  #
334
359
  def value regex
335
- add(RowFilter.value(regex))
360
+ add RowFilter.value(regex)
336
361
  end
337
362
 
363
+ ##
338
364
  # Adds a label filter instance to apply a label based on the result of read rows.
339
365
  #
340
366
  # Applies the given label to all cells in the output row. This allows
@@ -355,13 +381,15 @@ module Google
355
381
  # `self` instance of chain filter.
356
382
  #
357
383
  # @example
384
+ # require "google/cloud/bigtable"
358
385
  #
359
386
  # filter = Google::Cloud::Bigtable::RowFilter.chain.label("user-detail")
360
387
  #
361
388
  def label value
362
- add(RowFilter.label(value))
389
+ add RowFilter.label(value)
363
390
  end
364
391
 
392
+ ##
365
393
  # Adds a cell-per-row-offset filter instance to skip the first N cells.
366
394
  #
367
395
  # Skips the first N cells of each row, matching all subsequent cells.
@@ -373,32 +401,36 @@ module Google
373
401
  # `self` instance of chain filter.
374
402
  #
375
403
  # @example
404
+ # require "google/cloud/bigtable"
376
405
  #
377
406
  # filter = Google::Cloud::Bigtable::RowFilter.chain.cells_per_row_offset(3)
378
407
  #
379
408
  def cells_per_row_offset offset
380
- add(RowFilter.cells_per_row_offset(offset))
409
+ add RowFilter.cells_per_row_offset(offset)
381
410
  end
382
411
 
383
- # Adds a cells-per-row-limit filter instance.
412
+ ##
413
+ # Adds a cells-per-row-limit filter.
384
414
  #
385
415
  # Matches only the first N cells of each row.
386
416
  # If duplicate cells are present, as is possible when using an Interleave,
387
417
  # each copy of the cell is counted separately.
388
418
  #
389
- # @param limit [String] Max cell match per row limit
419
+ # @param limit [String] Max cell match per row limit.
390
420
  # @return [Google::Cloud::Bigtable::RowFilter::ChainFilter]
391
421
  # `self` instance of chain filter.
392
422
  #
393
423
  # @example
424
+ # require "google/cloud/bigtable"
394
425
  #
395
426
  # filter = Google::Cloud::Bigtable::RowFilter.chain.cells_per_row(5)
396
427
  #
397
428
  def cells_per_row limit
398
- add(RowFilter.cells_per_row(limit))
429
+ add RowFilter.cells_per_row(limit)
399
430
  end
400
431
 
401
- # Adds a cells-per-column filter instance.
432
+ ##
433
+ # Adds a cells-per-column filter.
402
434
  #
403
435
  # Matches only the most recent N cells within each column. For example,
404
436
  # if N=2, this filter would match column `foo:bar` at timestamps 10 and 9,
@@ -407,19 +439,21 @@ module Google
407
439
  # If duplicate cells are present, as is possible when using an Interleave,
408
440
  # each copy of the cell is counted separately.
409
441
  #
410
- # @param limit [String] Max cell match per column limit
442
+ # @param limit [String] Max cell match per column limit.
411
443
  # @return [Google::Cloud::Bigtable::RowFilter::ChainFilter]
412
444
  # `self` instance of chain filter.
413
445
  #
414
446
  # @example
447
+ # require "google/cloud/bigtable"
415
448
  #
416
449
  # filter = Google::Cloud::Bigtable::RowFilter.chain.cells_per_column(5)
417
450
  #
418
451
  def cells_per_column limit
419
- add(RowFilter.cells_per_column(limit))
452
+ add RowFilter.cells_per_column(limit)
420
453
  end
421
454
 
422
- # Adds a timestamp-range filter instance.
455
+ ##
456
+ # Adds a timestamp-range filter.
423
457
  #
424
458
  # Matches only cells with timestamps within the given range.
425
459
  # Specifies a contiguous range of timestamps.
@@ -432,6 +466,7 @@ module Google
432
466
  # `self` instance of chain filter.
433
467
  #
434
468
  # @example
469
+ # require "google/cloud/bigtable"
435
470
  #
436
471
  # timestamp_micros = (Time.now.to_f * 1000000).round(-3)
437
472
  # from = timestamp_micros - 300000000
@@ -440,38 +475,49 @@ module Google
440
475
  # filter = Google::Cloud::Bigtable::RowFilter.chain.timestamp_range(from: from, to: to)
441
476
  #
442
477
  def timestamp_range from: nil, to: nil
443
- add(RowFilter.timestamp_range(from: from, to: to))
478
+ add RowFilter.timestamp_range(from: from, to: to)
444
479
  end
445
480
 
446
- # Adds a value-range filter instance.
481
+ ##
482
+ # Adds a value-range filter.
447
483
  #
448
484
  # Matches only cells with values that fall within the given range.
449
485
  #
450
486
  # See {Google::Cloud::Bigtable::ValueRange#from} and { Google::Cloud::Bigtable::ValueRange#to} for range
451
- # option inclusive/exclusive options
487
+ # option inclusive/exclusive options.
452
488
  #
453
489
  # * The value at which to start the range. If neither field is set, interpreted as an empty string, inclusive.
454
- # * The value at which to end the range. If neither field is set, interpreted as the infinite string, exclusive.
490
+ # * The value at which to end the range. If neither field is set, interpreted as the infinite string,
491
+ # exclusive.
455
492
  #
456
493
  # @param range [Google::Cloud::Bigtable::ValueRange]
457
494
  # @return [Google::Cloud::Bigtable::RowFilter::ChainFilter]
458
495
  # `self` instance of chain filter.
459
496
  #
460
- # @example Start to end range
497
+ # @example Start to end range.
498
+ # require "google/cloud/bigtable"
461
499
  #
462
- # range = Google::Cloud::Bigtable::ValueRange.from("abc").to('xyz')
500
+ # bigtable = Google::Cloud::Bigtable.new
501
+ # table = bigtable.table("my-instance", "my-table")
502
+ #
503
+ # range = table.new_value_range.from("value-001").to("value-005")
463
504
  # filter = Google::Cloud::Bigtable::RowFilter.chain.value_range(range)
464
505
  #
465
- # @example Start exlusive to infinite end range
506
+ # @example Start exclusive to infinite end range.
507
+ # require "google/cloud/bigtable"
508
+ #
509
+ # bigtable = Google::Cloud::Bigtable.new
510
+ # table = bigtable.table("my-instance", "my-table")
466
511
  #
467
- # range = Google::Cloud::Bigtable::ValueRange.from("abc", inclusive: false)
512
+ # range = table.new_value_range.from("value-001", inclusive: false)
468
513
  # filter = Google::Cloud::Bigtable::RowFilter.chain.value_range(range)
469
514
  #
470
515
  def value_range range
471
- add(RowFilter.value_range(range))
516
+ add RowFilter.value_range(range)
472
517
  end
473
518
 
474
- # Adds a column-range filter instance.
519
+ ##
520
+ # Adds a column-range filter.
475
521
  #
476
522
  # Matches only cells from columns within the given range.
477
523
  #
@@ -480,34 +526,38 @@ module Google
480
526
  # `self` instance of chain filter.
481
527
  #
482
528
  # @example
529
+ # require "google/cloud/bigtable"
483
530
  #
484
- # range = Google::Cloud::Bigtable::ColumnRange.new(cf).from("field0").to('field5')
531
+ # range = Google::Cloud::Bigtable::ColumnRange.new("cf").from("field0").to('field5')
485
532
  #
486
533
  # filter = Google::Cloud::Bigtable::RowFilter.chain.column_range(range)
487
534
  #
488
535
  def column_range range
489
- add(RowFilter.column_range(range))
536
+ add RowFilter.column_range(range)
490
537
  end
491
538
 
492
- # Gets the number of filters in the chain filter.
539
+ ##
540
+ # Gets the number of filters in the chain.
493
541
  #
494
542
  # @return [Integer]
495
543
  #
496
544
  # @example
545
+ # require "google/cloud/bigtable"
497
546
  #
498
- # filter = Google::Cloud::Bigtable::RowFilter.chain.key("user-1*").label("user")
499
- # filter.length # 2
547
+ # filter = Google::Cloud::Bigtable::RowFilter.chain.key("user-1*").label("user")
548
+ # filter.length # 2
500
549
  #
501
550
  def length
502
- @grpc.filters.length
551
+ @filters.length
503
552
  end
504
553
 
505
- # Gets the list of filters.
554
+ ##
555
+ # Returns a frozen copy of the filters array.
506
556
  #
507
- # @return [Array<Google::Bigtable::V2::RowFilter>]
557
+ # @return [Array<SimpleFilter|ChainFilter|InterleaveFilter|ConditionFilter>]
508
558
  #
509
559
  def filters
510
- @grpc.filters
560
+ @filters.dup.freeze
511
561
  end
512
562
 
513
563
  # @private
@@ -517,10 +567,11 @@ module Google
517
567
  # @return [Google::Bigtable::V2::RowFilter]
518
568
  #
519
569
  def to_grpc
520
- Google::Bigtable::V2::RowFilter.new(chain: @grpc)
570
+ Google::Bigtable::V2::RowFilter.new(
571
+ chain: Google::Bigtable::V2::RowFilter::Chain.new(filters: @filters.map(&:to_grpc))
572
+ )
521
573
  end
522
574
 
523
-
524
575
  private
525
576
 
526
577
  # @private
@@ -529,7 +580,7 @@ module Google
529
580
  # @param filter [SimpleFilter, ChainFilter, InterleaveFilter, ConditionFilter]
530
581
  #
531
582
  def add filter
532
- @grpc.filters << filter.to_grpc
583
+ @filters << filter
533
584
  self
534
585
  end
535
586
  end