Class: Google::Cloud::Bigtable::AppProfile

Inherits:
Object
  • Object
show all
Defined in:
lib/google/cloud/bigtable/app_profile.rb,
lib/google/cloud/bigtable/app_profile/job.rb,
lib/google/cloud/bigtable/app_profile/list.rb

Overview

AppProfile

A configuration object describing how Cloud Bigtable should treat traffic from a particular end user application.

Examples:

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance("my-instance")

app_profile = bigtable.app_profile("my-instance", "my-app-profile")

# Update
app_profile.description = "User data instance app profile"
app_profile.routing_policy = Google::Cloud::Bigtable::AppProfile.multi_cluster_routing
job = app_profile.save
job.wait_until_done!

# Delete
app_profile.delete

Defined Under Namespace

Classes: Job, List

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.multi_cluster_routingGoogle::Bigtable::Admin::V2::AppProfile::MultiClusterRoutingUseAny

Create instance of multi cluster routing policy.

Read/write requests may be routed to any cluster in the instance, and will Fail over to another cluster in the event of transient errors or delays. Choosing this option sacrifices read-your-writes consistency to improve availability

Examples:

Create instance of multi cluster routing


Google::Cloud::Bigtable::AppProfile.multi_cluster_routing

Returns:



313
314
315
# File 'lib/google/cloud/bigtable/app_profile.rb', line 313

def self.multi_cluster_routing
  Google::Bigtable::Admin::V2::AppProfile::MultiClusterRoutingUseAny.new
end

.single_cluster_routing(cluster_id, allow_transactional_writes: false) ⇒ Google::Bigtable::Admin::V2::AppProfile::SingleClusterRouting

Create instance of single cluster routing

Unconditionally routes all read/write requests to a specific cluster. This option preserves read-your-writes consistency, but does not improve availability.

Examples:

Create instance of single cluster routing


Google::Cloud::Bigtable::AppProfile.single_cluster_routing("my-cluster")

# With allowed transactional writes
Google::Cloud::Bigtable::AppProfile.single_cluster_routing(
  "my-cluster",
  allow_transactional_writes: true
)

Parameters:

  • cluster_id (String)

    The cluster to which read/write requests should be routed.

  • allow_transactional_writes (Boolean)

    Whether or not CheckAndMutateRow and ReadModifyWriteRow requests are allowed by this app profile. It is unsafe to send these requests to the same table/row/column in multiple clusters. Default value is false.

Returns:



342
343
344
345
346
347
348
349
# File 'lib/google/cloud/bigtable/app_profile.rb', line 342

def self.single_cluster_routing \
    cluster_id,
    allow_transactional_writes: false
  Google::Bigtable::Admin::V2::AppProfile::SingleClusterRouting.new(
    cluster_id: cluster_id,
    allow_transactional_writes: allow_transactional_writes
  )
end

Instance Method Details

#delete(ignore_warnings: false) ⇒ Boolean

Delete app profile.

Examples:

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance("my-instance")
app_profile = bigtable.instance("my-app-profile")

app_profile.delete(ignore_warnings: true) # Ignore warnings.

# OR : Not ignoring warnings
app_profile.delete

Parameters:

  • ignore_warnings (Boolean)

    Default value is false. If true, ignore safety checks when deleting the app profile.

Returns:

  • (Boolean)

    Returns true if the app profile was deleted.



204
205
206
207
208
209
210
211
212
# File 'lib/google/cloud/bigtable/app_profile.rb', line 204

def delete ignore_warnings: false
  ensure_service!
  service.delete_app_profile(
    instance_id,
    name,
    ignore_warnings: ignore_warnings
  )
  true
end

#descriptionString

Description of the AppProfile.

Returns:

  • (String)


100
101
102
# File 'lib/google/cloud/bigtable/app_profile.rb', line 100

def description
  @grpc.description
end

#description=(text) ⇒ Object

Set description of the AppProfile.

Parameters:

  • text (String)

    Description text



107
108
109
110
# File 'lib/google/cloud/bigtable/app_profile.rb', line 107

def description= text
  @grpc.description = text
  @changed_fields["description"] = "description"
end

#etagString

Etag for optimistic concurrency control.

Returns:

  • (String)


93
94
95
# File 'lib/google/cloud/bigtable/app_profile.rb', line 93

def etag
  @grpc.etag
end

#instance_idString

The unique identifier for the instance.

Returns:

  • (String)


71
72
73
# File 'lib/google/cloud/bigtable/app_profile.rb', line 71

def instance_id
  @grpc.name.split("/")[3]
end

#multi_cluster_routingGoogle::Bigtable::Admin::V2::AppProfile::MultiClusterRoutingUseAny

Get value of multi-cluster routing policy.



115
116
117
# File 'lib/google/cloud/bigtable/app_profile.rb', line 115

def multi_cluster_routing
  @grpc.multi_cluster_routing_use_any
end

#nameString

The unique identifier for the app profile.

Returns:

  • (String)


78
79
80
# File 'lib/google/cloud/bigtable/app_profile.rb', line 78

def name
  @grpc.name.split("/")[5]
end

#pathString

The full path for the instance resource. Values are of the form projects/<project_id>/instances/<instance_id>.

Returns:

  • (String)


86
87
88
# File 'lib/google/cloud/bigtable/app_profile.rb', line 86

def path
  @grpc.name
end

#project_idString

The unique identifier for the project.

Returns:

  • (String)


64
65
66
# File 'lib/google/cloud/bigtable/app_profile.rb', line 64

def project_id
  @grpc.name.split("/")[1]
end

#reload!Google::Cloud::Bigtable::AppProfile

Reload app profile information.



296
297
298
299
# File 'lib/google/cloud/bigtable/app_profile.rb', line 296

def reload!
  @grpc = service.get_app_profile(instance_id, name)
  self
end

#routing_policyGoogle::Bigtable::Admin::V2::AppProfile::SingleClusterRouting, Google::Bigtable::Admin::V2::AppProfile::MultiClusterRoutingUseAny

Get routing policy



180
181
182
# File 'lib/google/cloud/bigtable/app_profile.rb', line 180

def routing_policy
  @grpc.single_cluster_routing || @grpc.multi_cluster_routing_use_any
end

#routing_policy=(policy) ⇒ Object

Set routing policy

Examples:

Set multi cluster routing policy

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance("my-instance")
app_profile = instance.app_profile("my-app-profile")

routing_policy = Google::Cloud::Bigtable::AppProfile.multi_cluster_routing
app_profile.routing_policy = routing_policy

Set single cluster routing policy

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance("my-instance")
app_profile = instance.app_profile("my-app-profile")

routing_policy = Google::Cloud::Bigtable::AppProfile.single_cluster_routing(
  "my-instance-cluster-1"
  allow_transactional_writes: true
)
app_profile.routing_policy = routing_policy

Parameters:

  • policy (Google::Bigtable::Admin::V2::AppProfile::SingleClusterRouting | Google::Bigtable::Admin::V2::AppProfile::MultiClusterRoutingUseAny)

    The routing policy for all read/write requests which use this app profile. A value must be explicitly set.

    Routing Policies:

    • multi_cluster_routing - Read/write requests may be routed to any cluster in the instance, and will fail over to another cluster in the event of transient errors or delays. Choosing this option sacrifices read-your-writes consistency to improve availability.
    • single_cluster_routing - Unconditionally routes all read/write requests to a specific cluster. This option preserves read-your-writes consistency, but does not improve availability. Value contain cluster_id and optional field allow_transactional_writes.


165
166
167
168
169
170
171
172
173
174
# File 'lib/google/cloud/bigtable/app_profile.rb', line 165

def routing_policy= policy
  if policy.is_a?(Google::Bigtable::Admin::V2::AppProfile:: \
      SingleClusterRouting)
    @grpc.single_cluster_routing = policy
    @changed_fields["routing_policy"] = "single_cluster_routing"
  else
    @grpc.multi_cluster_routing_use_any = policy
    @changed_fields["routing_policy"] = "multi_cluster_routing_use_any"
  end
end

#save(ignore_warnings: false) ⇒ Google::Cloud::Bigtable::AppProfile::Job Also known as: update

Update app profile.

Examples:

Update

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

app_profile = bigtable.app_profile("my-app-profile")

app_profile.description = "User data instance app profile"
app_profile.routing_policy = \
  Google::Cloud::Bigtable::AppProfile.multi_cluster_routing

job = app_profile.save
job.wait_until_done!
if job.error?
  puts job.error
else
  puts "App profile successfully update."
  app_profile = job.app_profile
end

# OR - Update with ignoring warnings.
job = app_profile.save(ignore_warnings: true)
job.wait_until_done!

Update with single cluster routing

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance("my-instance")
app_profile = bigtable.instance("my-app-profile")

app_profile.description = "User data instance app profile"
routing_policy = Google::Cloud::Bigtable::AppProfile.single_cluster_routing(
  "my-cluster",
  allow_transactional_writes: true
)
app_profile.routing_policy = routing_policy

job = app_profile.save

job.done? #=> false
job.reload!
job.done? #=> false

# Reload job until completion.
job.wait_until_done!
job.done? #=> true

if job.error?
  puts job.error
else
  app_profile = job.app_profile
  puts app_profile.name
end

Parameters:

  • ignore_warnings (Boolean)

    Default value is false. If true, ignore safety checks when updating the app profile.

Returns:



277
278
279
280
281
282
283
284
285
286
287
288
289
# File 'lib/google/cloud/bigtable/app_profile.rb', line 277

def save ignore_warnings: false
  ensure_service!
  update_mask = Google::Protobuf::FieldMask.new(
    paths: @changed_fields.values
  )
  grpc = service.update_app_profile(
    @grpc,
    update_mask,
    ignore_warnings: ignore_warnings
  )
  @changed_fields.clear
  AppProfile::Job.from_grpc(grpc, service)
end

#single_cluster_routingGoogle::Bigtable::Admin::V2::AppProfile::SingleClusterRouting

Get value of single cluster routing policy



122
123
124
# File 'lib/google/cloud/bigtable/app_profile.rb', line 122

def single_cluster_routing
  @grpc.single_cluster_routing
end