class Google::Cloud::Bigtable::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
@private The gRPC Service
object.
Public Class Methods
@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
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
@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
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
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 of the app profile.
@return [String]
# File lib/google/cloud/bigtable/app_profile.rb, line 114 def description @grpc.description end
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 for optimistic concurrency control.
@return [String]
# File lib/google/cloud/bigtable/app_profile.rb, line 105 def etag @grpc.etag end
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
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
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
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
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
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
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
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
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
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
Protected Instance Methods
@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