google-cloud-bigtable 2.8.0 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/google/cloud/bigtable/convert.rb +34 -0
- data/lib/google/cloud/bigtable/instance.rb +6 -9
- data/lib/google/cloud/bigtable/project.rb +6 -9
- data/lib/google/cloud/bigtable/service.rb +40 -15
- data/lib/google/cloud/bigtable/table.rb +7 -5
- data/lib/google/cloud/bigtable/version.rb +1 -1
- data/lib/google/cloud/bigtable.rb +26 -7
- data/lib/google-cloud-bigtable.rb +2 -0
- metadata +19 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf857acc4d00f606d2712fea755ba9f18d8c7d898599144029ff341081549f4c
|
4
|
+
data.tar.gz: aed266e0fabdd16d2ac25c21dde0501e4a0e4172a828f7cc5e468ec9b9caa190
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f232903645d9d3e5614c862813005f2e35d998e369f6f1b0b949245e3f5a0a8fb5735d57ac3fb721c7b244d2d8e659ae94e7addef250b2fdd6cc01ad76fd6a5
|
7
|
+
data.tar.gz: 81cc42b99915c8fc15b42020a2582075bfaf5108420d9e3f8350dbece58da63a620316216fd1459ce34feb6b2d6c2341375b800a3c840ec2d7e1b647a09e1647
|
data/CHANGELOG.md
CHANGED
@@ -17,6 +17,13 @@
|
|
17
17
|
|
18
18
|
require "time"
|
19
19
|
require "date"
|
20
|
+
require "gapic/protobuf"
|
21
|
+
require "gapic/call_options"
|
22
|
+
require "gapic/headers"
|
23
|
+
require "google/cloud/bigtable/version"
|
24
|
+
require "google/cloud/bigtable/v2/version"
|
25
|
+
require "google/bigtable/v2/bigtable_pb"
|
26
|
+
require "google/cloud/bigtable/admin/v2"
|
20
27
|
|
21
28
|
module Google
|
22
29
|
module Cloud
|
@@ -89,6 +96,33 @@ module Google
|
|
89
96
|
return [value].pack "q>" if value.is_a? Integer
|
90
97
|
value
|
91
98
|
end
|
99
|
+
|
100
|
+
def ping_and_warm_request table_path, app_profile_id, timeout
|
101
|
+
request = {
|
102
|
+
name: table_path.split("/").slice(0, 4).join("/"),
|
103
|
+
app_profile_id: app_profile_id
|
104
|
+
}
|
105
|
+
request = ::Gapic::Protobuf.coerce request, to: ::Google::Cloud::Bigtable::V2::PingAndWarmRequest
|
106
|
+
|
107
|
+
header_params = {}
|
108
|
+
if request.name && %r{^projects/[^/]+/instances/[^/]+/?$}.match?(request.name)
|
109
|
+
header_params["name"] = request.name
|
110
|
+
end
|
111
|
+
if request.app_profile_id && !request.app_profile_id.empty?
|
112
|
+
header_params["app_profile_id"] = request.app_profile_id
|
113
|
+
end
|
114
|
+
request_params_header = URI.encode_www_form header_params
|
115
|
+
metadata = {
|
116
|
+
"x-goog-request-params": request_params_header,
|
117
|
+
"x-goog-api-client":
|
118
|
+
::Gapic::Headers.x_goog_api_client(lib_name: "gccl",
|
119
|
+
lib_version: ::Google::Cloud::Bigtable::VERSION,
|
120
|
+
gapic_version: ::Google::Cloud::Bigtable::V2::VERSION),
|
121
|
+
"google-cloud-resource-prefix": "projects/#{table_path.split('/')[1]}"
|
122
|
+
}
|
123
|
+
options = ::Gapic::CallOptions.new timeout: timeout, metadata: metadata
|
124
|
+
[request, options]
|
125
|
+
end
|
92
126
|
end
|
93
127
|
end
|
94
128
|
end
|
@@ -521,15 +521,12 @@ module Google
|
|
521
521
|
ensure_service!
|
522
522
|
|
523
523
|
view ||= :SCHEMA_VIEW
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
table.app_profile_id = app_profile_id
|
532
|
-
table
|
524
|
+
if perform_lookup
|
525
|
+
grpc = service.get_table instance_id, table_id, view: view
|
526
|
+
Table.from_grpc grpc, service, view: view, app_profile_id: app_profile_id
|
527
|
+
else
|
528
|
+
Table.from_path service.table_path(instance_id, table_id), service, app_profile_id: app_profile_id
|
529
|
+
end
|
533
530
|
rescue Google::Cloud::NotFoundError
|
534
531
|
nil
|
535
532
|
end
|
@@ -343,15 +343,12 @@ module Google
|
|
343
343
|
ensure_service!
|
344
344
|
|
345
345
|
view ||= :SCHEMA_VIEW
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
table.app_profile_id = app_profile_id
|
354
|
-
table
|
346
|
+
if perform_lookup
|
347
|
+
grpc = service.get_table instance_id, table_id, view: view
|
348
|
+
Table.from_grpc grpc, service, view: view, app_profile_id: app_profile_id
|
349
|
+
else
|
350
|
+
Table.from_path service.table_path(instance_id, table_id), service, app_profile_id: app_profile_id
|
351
|
+
end
|
355
352
|
rescue Google::Cloud::NotFoundError
|
356
353
|
nil
|
357
354
|
end
|
@@ -20,6 +20,9 @@ require "google/cloud/bigtable/errors"
|
|
20
20
|
require "google/cloud/bigtable/credentials"
|
21
21
|
require "google/cloud/bigtable/v2"
|
22
22
|
require "google/cloud/bigtable/admin/v2"
|
23
|
+
require "google/cloud/bigtable/convert"
|
24
|
+
require "gapic/lru_hash"
|
25
|
+
require "concurrent"
|
23
26
|
|
24
27
|
module Google
|
25
28
|
module Cloud
|
@@ -49,12 +52,17 @@ module Google
|
|
49
52
|
# @param timeout [Integer]
|
50
53
|
# The default timeout, in seconds, for calls made through this client.
|
51
54
|
#
|
52
|
-
def initialize project_id, credentials, host: nil, host_admin: nil, timeout: nil
|
55
|
+
def initialize project_id, credentials, host: nil, host_admin: nil, timeout: nil,
|
56
|
+
channel_selection: nil, channel_count: nil
|
53
57
|
@project_id = project_id
|
54
58
|
@credentials = credentials
|
55
59
|
@host = host
|
56
60
|
@host_admin = host_admin
|
57
61
|
@timeout = timeout
|
62
|
+
@channel_selection = channel_selection
|
63
|
+
@channel_count = channel_count
|
64
|
+
@bigtable_clients = ::Gapic::LruHash.new 10
|
65
|
+
@mutex = Mutex.new
|
58
66
|
end
|
59
67
|
|
60
68
|
def instances
|
@@ -83,15 +91,15 @@ module Google
|
|
83
91
|
end
|
84
92
|
attr_accessor :mocked_tables
|
85
93
|
|
86
|
-
def client
|
94
|
+
def client table_path, app_profile_id
|
87
95
|
return mocked_client if mocked_client
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
96
|
+
table_key = "#{table_path}_#{app_profile_id}"
|
97
|
+
@mutex.synchronize do
|
98
|
+
if @bigtable_clients.get(table_key).nil?
|
99
|
+
bigtable_client = create_bigtable_client table_path, app_profile_id
|
100
|
+
@bigtable_clients.put table_key, bigtable_client
|
101
|
+
end
|
102
|
+
@bigtable_clients.get table_key
|
95
103
|
end
|
96
104
|
end
|
97
105
|
attr_accessor :mocked_client
|
@@ -649,7 +657,7 @@ module Google
|
|
649
657
|
end
|
650
658
|
|
651
659
|
def read_rows instance_id, table_id, app_profile_id: nil, rows: nil, filter: nil, rows_limit: nil
|
652
|
-
client.read_rows(
|
660
|
+
client(table_path(instance_id, table_id), app_profile_id).read_rows(
|
653
661
|
**{
|
654
662
|
table_name: table_path(instance_id, table_id),
|
655
663
|
rows: rows,
|
@@ -661,11 +669,11 @@ module Google
|
|
661
669
|
end
|
662
670
|
|
663
671
|
def sample_row_keys table_name, app_profile_id: nil
|
664
|
-
client.sample_row_keys table_name: table_name, app_profile_id: app_profile_id
|
672
|
+
client(table_name, app_profile_id).sample_row_keys table_name: table_name, app_profile_id: app_profile_id
|
665
673
|
end
|
666
674
|
|
667
675
|
def mutate_row table_name, row_key, mutations, app_profile_id: nil
|
668
|
-
client.mutate_row(
|
676
|
+
client(table_name, app_profile_id).mutate_row(
|
669
677
|
**{
|
670
678
|
table_name: table_name,
|
671
679
|
app_profile_id: app_profile_id,
|
@@ -676,7 +684,7 @@ module Google
|
|
676
684
|
end
|
677
685
|
|
678
686
|
def mutate_rows table_name, entries, app_profile_id: nil
|
679
|
-
client.mutate_rows(
|
687
|
+
client(table_name, app_profile_id).mutate_rows(
|
680
688
|
**{
|
681
689
|
table_name: table_name,
|
682
690
|
app_profile_id: app_profile_id,
|
@@ -691,7 +699,7 @@ module Google
|
|
691
699
|
predicate_filter: nil,
|
692
700
|
true_mutations: nil,
|
693
701
|
false_mutations: nil
|
694
|
-
client.check_and_mutate_row(
|
702
|
+
client(table_name, app_profile_id).check_and_mutate_row(
|
695
703
|
**{
|
696
704
|
table_name: table_name,
|
697
705
|
app_profile_id: app_profile_id,
|
@@ -704,7 +712,7 @@ module Google
|
|
704
712
|
end
|
705
713
|
|
706
714
|
def read_modify_write_row table_name, row_key, rules, app_profile_id: nil
|
707
|
-
client.read_modify_write_row(
|
715
|
+
client(table_name, app_profile_id).read_modify_write_row(
|
708
716
|
**{
|
709
717
|
table_name: table_name,
|
710
718
|
app_profile_id: app_profile_id,
|
@@ -885,6 +893,23 @@ module Google
|
|
885
893
|
def inspect
|
886
894
|
"#{self.class}(#{@project_id})"
|
887
895
|
end
|
896
|
+
|
897
|
+
def create_bigtable_client table_path, app_profile_id
|
898
|
+
V2::Bigtable::Client.new do |config|
|
899
|
+
config.credentials = credentials if credentials
|
900
|
+
config.timeout = timeout if timeout
|
901
|
+
config.endpoint = host if host
|
902
|
+
config.lib_name = "gccl"
|
903
|
+
config.lib_version = Google::Cloud::Bigtable::VERSION
|
904
|
+
config.metadata = { "google-cloud-resource-prefix": "projects/#{@project_id}" }
|
905
|
+
config.channel_pool.channel_selection = @channel_selection
|
906
|
+
config.channel_pool.channel_count = @channel_count
|
907
|
+
request, options = Convert.ping_and_warm_request table_path, app_profile_id, timeout
|
908
|
+
config.channel_pool.on_channel_create = proc do |channel|
|
909
|
+
channel.call_rpc :ping_and_warm, request, options: options
|
910
|
+
end
|
911
|
+
end
|
912
|
+
end
|
888
913
|
end
|
889
914
|
end
|
890
915
|
end
|
@@ -72,11 +72,13 @@ module Google
|
|
72
72
|
# @private
|
73
73
|
#
|
74
74
|
# Creates a new Table instance.
|
75
|
-
def initialize grpc, service, view:
|
75
|
+
def initialize grpc, service, view:, app_profile_id: nil
|
76
76
|
@grpc = grpc
|
77
77
|
@service = service
|
78
|
+
@app_profile_id = app_profile_id
|
78
79
|
raise ArgumentError, "view must not be nil" if view.nil?
|
79
80
|
@loaded_views = Set[view]
|
81
|
+
@service.client path, app_profile_id
|
80
82
|
end
|
81
83
|
|
82
84
|
##
|
@@ -659,8 +661,8 @@ module Google
|
|
659
661
|
# @param view [Symbol] View type.
|
660
662
|
# @return [Google::Cloud::Bigtable::Table]
|
661
663
|
#
|
662
|
-
def self.from_grpc grpc, service, view:
|
663
|
-
new grpc, service, view: view
|
664
|
+
def self.from_grpc grpc, service, view:, app_profile_id: nil
|
665
|
+
new grpc, service, view: view, app_profile_id: app_profile_id
|
664
666
|
end
|
665
667
|
|
666
668
|
# @private
|
@@ -672,9 +674,9 @@ module Google
|
|
672
674
|
# @param service [Google::Cloud::Bigtable::Service]
|
673
675
|
# @return [Google::Cloud::Bigtable::Table]
|
674
676
|
#
|
675
|
-
def self.from_path path, service
|
677
|
+
def self.from_path path, service, app_profile_id: nil
|
676
678
|
grpc = Google::Cloud::Bigtable::Admin::V2::Table.new name: path
|
677
|
-
new grpc, service, view: :NAME_ONLY
|
679
|
+
new grpc, service, view: :NAME_ONLY, app_profile_id: app_profile_id
|
678
680
|
end
|
679
681
|
|
680
682
|
protected
|
@@ -63,6 +63,10 @@ module Google
|
|
63
63
|
# updater_proc is supplied.
|
64
64
|
# @param timeout [Integer]
|
65
65
|
# The default timeout, in seconds, for calls made through this client. Optional.
|
66
|
+
# @param channel_selection [Symbol] The algorithm for selecting a channel from the
|
67
|
+
# pool of available channels. This parameter can have the following symbols:
|
68
|
+
# * `:least_loaded` selects the channel having least number of concurrent streams.
|
69
|
+
# @param channel_count [Integer] The number of channels in the pool.
|
66
70
|
# @return [Google::Cloud::Bigtable::Project]
|
67
71
|
#
|
68
72
|
# @example
|
@@ -70,19 +74,25 @@ module Google
|
|
70
74
|
#
|
71
75
|
# client = Google::Cloud::Bigtable.new
|
72
76
|
#
|
77
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
78
|
+
# rubocop:disable Metrics/AbcSize
|
73
79
|
def self.new project_id: nil,
|
74
80
|
credentials: nil,
|
75
81
|
emulator_host: nil,
|
76
82
|
scope: nil,
|
77
83
|
endpoint: nil,
|
78
84
|
endpoint_admin: nil,
|
79
|
-
timeout: nil
|
80
|
-
|
81
|
-
|
82
|
-
|
85
|
+
timeout: nil,
|
86
|
+
channel_selection: nil,
|
87
|
+
channel_count: nil
|
88
|
+
project_id ||= default_project_id
|
89
|
+
scope ||= configure.scope
|
90
|
+
timeout ||= configure.timeout
|
83
91
|
emulator_host ||= configure.emulator_host
|
84
|
-
endpoint
|
92
|
+
endpoint ||= configure.endpoint
|
85
93
|
endpoint_admin ||= configure.endpoint_admin
|
94
|
+
channel_selection ||= configure.channel_selection
|
95
|
+
channel_count ||= configure.channel_count
|
86
96
|
|
87
97
|
return new_with_emulator project_id, emulator_host, timeout if emulator_host
|
88
98
|
|
@@ -90,10 +100,15 @@ module Google
|
|
90
100
|
project_id = resolve_project_id project_id, credentials
|
91
101
|
raise ArgumentError, "project_id is missing" if project_id.empty?
|
92
102
|
|
93
|
-
service = Bigtable::Service.new
|
94
|
-
|
103
|
+
service = Bigtable::Service.new project_id, credentials, host: endpoint,
|
104
|
+
host_admin: endpoint_admin, timeout: timeout,
|
105
|
+
channel_selection: channel_selection,
|
106
|
+
channel_count: channel_count
|
95
107
|
Bigtable::Project.new service
|
96
108
|
end
|
109
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
110
|
+
# rubocop:enable Metrics/AbcSize
|
111
|
+
|
97
112
|
|
98
113
|
##
|
99
114
|
# Configure the Google Cloud Bigtable library.
|
@@ -116,6 +131,10 @@ module Google
|
|
116
131
|
# to use the default endpoint.
|
117
132
|
# * `endpoint_admin` - (String) Override of the admin service endpoint
|
118
133
|
# host name, or `nil` to use the default admin endpoint.
|
134
|
+
# * `channel_selection` - (Symbol) The algorithm for selecting a channel from the
|
135
|
+
# pool of available channels. This parameter can have the following symbols:
|
136
|
+
# `:least_loaded` selects the channel having least number of concurrent streams.
|
137
|
+
# * `channel_count` - (Integer) The number of channels in the pool.
|
119
138
|
#
|
120
139
|
# @return [Google::Cloud::Config] The configuration object the
|
121
140
|
# Google::Cloud::Bigtable library uses.
|
@@ -171,4 +171,6 @@ Google::Cloud.configure.add_config! :bigtable do |config|
|
|
171
171
|
config.add_field! :emulator_host, default_emulator, match: String, allow_nil: true
|
172
172
|
config.add_field! :endpoint, "bigtable.googleapis.com", match: String
|
173
173
|
config.add_field! :endpoint_admin, "bigtableadmin.googleapis.com", match: String
|
174
|
+
config.add_field! :channel_selection, :least_loaded, match: Symbol
|
175
|
+
config.add_field! :channel_count, 1, match: Integer
|
174
176
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-cloud-bigtable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Google LLC
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-09-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: concurrent-ruby
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: google-cloud-bigtable-admin-v2
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -30,14 +44,14 @@ dependencies:
|
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
47
|
+
version: '0.14'
|
34
48
|
type: :runtime
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0.
|
54
|
+
version: '0.14'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: google-cloud-core
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -249,7 +263,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
249
263
|
- !ruby/object:Gem::Version
|
250
264
|
version: '0'
|
251
265
|
requirements: []
|
252
|
-
rubygems_version: 3.4.
|
266
|
+
rubygems_version: 3.4.19
|
253
267
|
signing_key:
|
254
268
|
specification_version: 4
|
255
269
|
summary: API Client library for Cloud Bigtable API
|