class Google::Cloud::Bigtable::AppProfile

# AppProfile

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

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance "my-instance"

app_profile = instance.app_profile "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

Attributes

service[RW]

@private The gRPC Service object.

Public Class Methods

from_grpc(grpc, service) click to toggle source

@private

Creates a new Instance instance from a Google::Cloud::Bigtable::Admin::V2::Table. @param grpc [Google::Cloud::Bigtable::Admin::V2::Table] @param service [Google::Cloud::Bigtable::Service] @return [Google::Cloud::Bigtable::Table]

# File lib/google/cloud/bigtable/app_profile.rb, line 423
def self.from_grpc grpc, service
  new grpc, service
end
multi_cluster_routing() click to toggle source

Creates an instance of the 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.

@return [Google::Cloud::Bigtable::MultiClusterRoutingUseAny]

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance "my-instance"

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

app_profile = instance.create_app_profile(
  "my-app-profile",
  routing_policy,
  description: "App profile for user data instance"
)
puts app_profile.routing_policy
# File lib/google/cloud/bigtable/app_profile.rb, line 373
def self.multi_cluster_routing
  Google::Cloud::Bigtable::MultiClusterRoutingUseAny.new
end
new(grpc, service) click to toggle source

@private

Creates a new AppProfile instance.

# File lib/google/cloud/bigtable/app_profile.rb, line 57
def initialize grpc, service
  @grpc = grpc
  @service = service
  @changed_fields = {}
end
single_cluster_routing(cluster_id, allow_transactional_writes: false) click to toggle source

Creates an instance of the single cluster routing policy.

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

@param cluster_id [String]

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

@param allow_transactional_writes [Boolean]

If true, `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.

@return [Google::Cloud::Bigtable::SingleClusterRouting]

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance "my-instance"

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

app_profile = instance.create_app_profile(
  "my-app-profile",
  routing_policy,
  description: "App profile for user data instance"
)
puts app_profile.routing_policy
# File lib/google/cloud/bigtable/app_profile.rb, line 412
def self.single_cluster_routing cluster_id, allow_transactional_writes: false
  Google::Cloud::Bigtable::SingleClusterRouting.new cluster_id, allow_transactional_writes
end

Public Instance Methods

delete(ignore_warnings: false) click to toggle source

Deletes the app profile.

@param ignore_warnings [Boolean]

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

@return [Boolean] Returns `true` if the app profile was deleted.

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance "my-instance"

app_profile = instance.app_profile "my-app-profile"

app_profile.delete ignore_warnings: true # Ignore warnings.

# OR : Not ignoring warnings
app_profile.delete
# File lib/google/cloud/bigtable/app_profile.rb, line 265
def delete ignore_warnings: false
  ensure_service!
  service.delete_app_profile instance_id, name, ignore_warnings: ignore_warnings
  true
end
description() click to toggle source

Description of the app profile.

@return [String]

# File lib/google/cloud/bigtable/app_profile.rb, line 114
def description
  @grpc.description
end
description=(text) click to toggle source

Sets the description of the app profile.

@param text [String] Description text

# File lib/google/cloud/bigtable/app_profile.rb, line 123
def description= text
  @grpc.description = text
  @changed_fields["description"] = "description"
end
etag() click to toggle source

Etag for optimistic concurrency control.

@return [String]

# File lib/google/cloud/bigtable/app_profile.rb, line 105
def etag
  @grpc.etag
end
instance_id() click to toggle source

The unique identifier for the instance to which the app profile belongs.

@return [String]

# File lib/google/cloud/bigtable/app_profile.rb, line 77
def instance_id
  @grpc.name.split("/")[3]
end
multi_cluster_routing() click to toggle source

Gets the multi-cluster routing policy, if present.

@return [Google::Cloud::Bigtable::MultiClusterRoutingUseAny, nil]

# File lib/google/cloud/bigtable/app_profile.rb, line 133
def multi_cluster_routing
  return nil unless @grpc.multi_cluster_routing_use_any

  Google::Cloud::Bigtable::MultiClusterRoutingUseAny.new
end
name() click to toggle source

The unique identifier for the app profile.

@return [String]

# File lib/google/cloud/bigtable/app_profile.rb, line 86
def name
  @grpc.name.split("/")[5]
end
path() click to toggle source

The full path for the app profile resource. Values are of the form: `projects/<project_id>/instances/<instance_id>/appProfiles/<app_profile_name>`.

@return [String]

# File lib/google/cloud/bigtable/app_profile.rb, line 96
def path
  @grpc.name
end
project_id() click to toggle source

The unique identifier for the project to which the app profile belongs.

@return [String]

# File lib/google/cloud/bigtable/app_profile.rb, line 68
def project_id
  @grpc.name.split("/")[1]
end
reload!() click to toggle source

Reloads the app profile data.

@return [Google::Cloud::Bigtable::AppProfile]

# File lib/google/cloud/bigtable/app_profile.rb, line 342
def reload!
  @grpc = service.get_app_profile instance_id, name
  self
end
routing_policy() click to toggle source

Gets the routing policy for all read/write requests that use the app profile.

Routing Policies:

  • {Google::Cloud::Bigtable::MultiClusterRoutingUseAny} - 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.

  • {Google::Cloud::Bigtable::SingleClusterRouting} - Unconditionally routes all read/write requests to a specific cluster. This option preserves read-your-writes consistency but does not improve availability. Value contains `cluster_id` and optional field `allow_transactional_writes`.

@return [Google::Cloud::Bigtable::RoutingPolicy]

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance "my-instance"

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

app_profile = instance.create_app_profile(
  "my-app-profile",
  routing_policy,
  description: "App profile for user data instance"
)
puts app_profile.routing_policy
# File lib/google/cloud/bigtable/app_profile.rb, line 239
def routing_policy
  single_cluster_routing || multi_cluster_routing
end
routing_policy=(policy) click to toggle source

Sets the routing policy for the app profile.

@param policy [Google::Cloud::Bigtable::RoutingPolicy]

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

Routing Policies:
* {Google::Cloud::Bigtable::MultiClusterRoutingUseAny} - 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.
* {Google::Cloud::Bigtable::SingleClusterRouting} - Unconditionally
  routes all read/write requests to a specific cluster. This option
  preserves read-your-writes consistency but does not improve
  availability. Value contains `cluster_id` and optional field
  `allow_transactional_writes`.

@example 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

@example 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-cluster",
  allow_transactional_writes: true
)
app_profile.routing_policy = routing_policy
# File lib/google/cloud/bigtable/app_profile.rb, line 194
def routing_policy= policy
  routing_policy_grpc = policy.to_grpc
  if routing_policy_grpc.is_a? Google::Cloud::Bigtable::Admin::V2::AppProfile::SingleClusterRouting
    @grpc.single_cluster_routing = routing_policy_grpc
    @changed_fields["routing_policy"] = "single_cluster_routing"
  else
    @grpc.multi_cluster_routing_use_any = routing_policy_grpc
    @changed_fields["routing_policy"] = "multi_cluster_routing_use_any"
  end
end
save(ignore_warnings: false) click to toggle source

Updates the app profile.

@param ignore_warnings [Boolean]

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

@return [Google::Cloud::Bigtable::AppProfile::Job]

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance "my-instance"

app_profile = instance.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 updated."
  app_profile = job.app_profile
end

@example Update with single cluster routing.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new

instance = bigtable.instance "my-instance"
app_profile = instance.app_profile "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? #=> true

if job.error?
  puts job.error
else
  app_profile = job.app_profile
  puts app_profile.name
end
# File lib/google/cloud/bigtable/app_profile.rb, line 328
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
Also aliased as: update
single_cluster_routing() click to toggle source

Gets the single cluster routing policy, if present.

@return [Google::Cloud::Bigtable::SingleClusterRouting, nil]

# File lib/google/cloud/bigtable/app_profile.rb, line 144
def single_cluster_routing
  return nil unless @grpc.single_cluster_routing

  Google::Cloud::Bigtable::SingleClusterRouting.new(
    @grpc.single_cluster_routing.cluster_id,
    @grpc.single_cluster_routing.allow_transactional_writes
  )
end
update(ignore_warnings: false)
Alias for: save

Protected Instance Methods

ensure_service!() click to toggle source

@private Raise an error unless an active connection to the service is available.

# File lib/google/cloud/bigtable/app_profile.rb, line 432
def ensure_service!
  raise "Must have active connection to service" unless service
end