class Google::Cloud::Bigtable::Backup

# Backup

A backup of a Cloud Bigtable table. See {Cluster#create_backup}, {Cluster#backup} and {Cluster#backups}.

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

# Update
backup.expire_time = Time.now + 60 * 60 * 7
backup.save

# Delete
backup.delete

Attributes

service[RW]

@private The gRPC Service object.

updates[R]

@private A list of attributes that were updated.

Public Class Methods

from_grpc(grpc, service) click to toggle source

@private

Creates a new Backup instance from a Google::Cloud::Bigtable::Admin::V2::Backup.

@param grpc [Google::Cloud::Bigtable::Admin::V2::Backup] @param service [Google::Cloud::Bigtable::Service] @return [Google::Cloud::Bigtable::Backup]

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

@private

Creates a new Backup instance.

# File lib/google/cloud/bigtable/backup.rb, line 61
def initialize grpc, service
  @grpc = grpc
  @service = service
end

Public Instance Methods

backup_id() click to toggle source

The unique identifier for the backup.

@return [String]

# File lib/google/cloud/bigtable/backup.rb, line 98
def backup_id
  @grpc.name.split("/")[7]
end
cluster_id() click to toggle source

The unique identifier for the cluster to which the backup belongs.

@return [String]

# File lib/google/cloud/bigtable/backup.rb, line 89
def cluster_id
  @grpc.name.split("/")[5]
end
creating?() click to toggle source

The backup is currently being created, and may be destroyed if the creation process encounters an error.

@return [Boolean]

# File lib/google/cloud/bigtable/backup.rb, line 197
def creating?
  state == :CREATING
end
delete() click to toggle source

Permanently deletes the backup.

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

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

backup.delete
# File lib/google/cloud/bigtable/backup.rb, line 468
def delete
  ensure_service!
  service.delete_backup instance_id, cluster_id, backup_id
  true
end
encryption_info() click to toggle source

The encryption information for the backup. See also {Instance::ClusterMap#add}.

@return [Google::Cloud::Bigtable::EncryptionInfo] The encryption information for the backup.

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

encryption_info = backup.encryption_info
encryption_info.encryption_type #=> :GOOGLE_DEFAULT_ENCRYPTION
# File lib/google/cloud/bigtable/backup.rb, line 227
def encryption_info
  EncryptionInfo.from_grpc @grpc.encryption_info
end
end_time() click to toggle source

The time that the backup was finished. The row data in the backup will be no newer than this timestamp.

@return [Time]

# File lib/google/cloud/bigtable/backup.rb, line 170
def end_time
  Convert.timestamp_to_time @grpc.end_time
end
expire_time() click to toggle source

The expiration time of the backup, with microseconds granularity that must be at least 6 hours and at most 30 days from the time the request is received. Once the expire time has passed, Cloud Bigtable will delete the backup and free the resources used by the backup.

@return [Time]

# File lib/google/cloud/bigtable/backup.rb, line 140
def expire_time
  Convert.timestamp_to_time @grpc.expire_time
end
expire_time=(new_expire_time) click to toggle source

Sets the expiration time of the backup, with microseconds granularity that must be at least 6 hours and at most 30 days from the time the request is received. Once the {#expire_time} has passed, Cloud Bigtable will delete the backup and free the resources used by the backup.

@param [Time] new_expire_time The new expiration time of the backup.

# File lib/google/cloud/bigtable/backup.rb, line 151
def expire_time= new_expire_time
  @grpc.expire_time = Convert.time_to_timestamp new_expire_time
end
instance_id() click to toggle source

The unique identifier for the instance to which the backup belongs.

@return [String]

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

The unique name of the backup. Value in the form `projects/<project>/instances/<instance>/clusters/<cluster>/backups/<backup>`.

@return [String]

# File lib/google/cloud/bigtable/backup.rb, line 108
def path
  @grpc.name
end
policy() { |policy| ... } click to toggle source

Gets the [Cloud IAM](cloud.google.com/iam/) access control policy for the backup.

@see cloud.google.com/bigtable/docs/access-control

@yield [policy] A block for updating the policy. The latest policy

will be read from the Bigtable service and passed to the block. After
the block completes, the modified policy will be written to the
service.

@yieldparam [Policy] policy the current Cloud IAM Policy for this

backup.

@return [Policy] The current Cloud IAM Policy for the backup.

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

policy = backup.policy

@example Update the policy by passing a block.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

backup.policy do |p|
  p.add "roles/owner", "user:owner@example.com"
end # 2 API calls
# File lib/google/cloud/bigtable/backup.rb, line 270
def policy
  ensure_service!
  grpc = service.get_backup_policy instance_id, cluster_id, backup_id
  policy = Policy.from_grpc grpc
  return policy unless block_given?
  yield policy
  update_policy policy
end
policy=(new_policy)
Alias for: update_policy
project_id() click to toggle source

The unique identifier for the project to which the backup belongs.

@return [String]

# File lib/google/cloud/bigtable/backup.rb, line 71
def project_id
  @grpc.name.split("/")[1]
end
ready?() click to toggle source

The backup has been successfully created and is ready to serve requests.

@return [Boolean]

# File lib/google/cloud/bigtable/backup.rb, line 206
def ready?
  state == :READY
end
reload!() click to toggle source

Reloads backup data.

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

# File lib/google/cloud/bigtable/backup.rb, line 447
def reload!
  @grpc = service.get_backup instance_id, cluster_id, backup_id
  self
end
restore(table_id, instance: nil) click to toggle source

Creates a new table by restoring data from a completed backup. The new table may be created in an instance different than that of the backup.

@param table_id [String] The table ID for the new table. This table must not yet exist. Required. @param instance [Instance, String] The instance or the ID of the instance for the new table, if different from

the instance of the backup. Optional.

@return [Google::Cloud::Bigtable::Table::RestoreJob] The job representing the long-running, asynchronous

processing of a backup restore table operation.

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

job = backup.restore "my-new-table"

job.wait_until_done!
job.done? #=> true

if job.error?
  status = job.error
else
  table = job.table
  optimized = job.optimize_table_operation_name
end

@example Create the table in a different instance.

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

table_instance = bigtable.instance "my-other-instance"
job = backup.restore "my-new-table", instance: table_instance

job.wait_until_done!
job.done? #=> true

if job.error?
  status = job.error
else
  table = job.table
  optimized = job.optimize_table_operation_name
end
# File lib/google/cloud/bigtable/backup.rb, line 405
def restore table_id, instance: nil
  table_instance_id = instance.respond_to?(:instance_id) ? instance.instance_id : instance
  grpc = service.restore_table table_id,
                               instance_id,
                               cluster_id,
                               backup_id,
                               table_instance_id: table_instance_id
  Table::RestoreJob.from_grpc grpc, service
end
save() click to toggle source

Updates the backup.

`expire_time` is the only updatable field.

@return [Boolean] Returns `true` if the update succeeded.

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

# Update
backup.expire_time = Time.now + 60 * 60 * 7
backup.save
# File lib/google/cloud/bigtable/backup.rb, line 435
def save
  ensure_service!
  @grpc = service.update_backup @grpc, [:expire_time]
  true
end
Also aliased as: update
size_bytes() click to toggle source

The size of the backup in bytes.

@return [Integer]

# File lib/google/cloud/bigtable/backup.rb, line 179
def size_bytes
  @grpc.size_bytes
end
source_table(perform_lookup: nil, view: nil) click to toggle source

The table from which this backup was created.

@param perform_lookup [Boolean] Creates table object without verifying that the table resource exists. Calls

made on this object will raise errors if the table does not exist. Default value is `false`. Optional. Helps
to reduce admin API calls.

@param view [Symbol] Table view type. Default view type is `:SCHEMA_VIEW`. Valid view types are:

* `:NAME_ONLY` - Only populates `name`.
* `:SCHEMA_VIEW` - Only populates `name` and fields related to the table's schema.
* `:REPLICATION_VIEW` - Only populates `name` and fields related to the table's replication state.
* `:FULL` - Populates all fields.

@return [Table]

# File lib/google/cloud/bigtable/backup.rb, line 127
def source_table perform_lookup: nil, view: nil
  table = Table.from_path @grpc.source_table, service
  return table.reload! view: view if perform_lookup
  table
end
start_time() click to toggle source

The time that the backup was started (i.e. approximately the time the `CreateBackup` request is received). The row data in this backup will be no older than this timestamp.

@return [Time]

# File lib/google/cloud/bigtable/backup.rb, line 161
def start_time
  Convert.timestamp_to_time @grpc.start_time
end
state() click to toggle source

The current state of the backup. Possible values are `:CREATING` and `:READY`.

@return [Symbol]

# File lib/google/cloud/bigtable/backup.rb, line 188
def state
  @grpc.state
end
test_iam_permissions(*permissions) click to toggle source

Tests the specified permissions against the [Cloud IAM](cloud.google.com/iam/) access control policy.

@see cloud.google.com/iam/docs/managing-policies Managing Policies @see cloud.google.com/bigtable/docs/access-control Access Control

@param permissions [String, Array<String>] permissions The set of permissions to

check access for. Permissions with wildcards (such as `*` or `bigtable.*`) are
not allowed.
See [Access Control](https://cloud.google.com/bigtable/docs/access-control).

@return [Array<String>] The permissions that are configured for the policy.

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

permissions = backup.test_iam_permissions(
  "bigtable.backups.delete",
  "bigtable.backups.get"
)
permissions.include? "bigtable.backups.delete" #=> false
permissions.include? "bigtable.backups.get" #=> true
# File lib/google/cloud/bigtable/backup.rb, line 345
def test_iam_permissions *permissions
  ensure_service!
  grpc = service.test_backup_permissions instance_id, cluster_id, backup_id, permissions.flatten
  grpc.permissions.to_a
end
update()
Alias for: save
update_policy(new_policy) click to toggle source

Updates the [Cloud IAM](cloud.google.com/iam/) access control policy for the backup. The policy should be read from {#policy}. See {Google::Cloud::Bigtable::Policy} for an explanation of the policy `etag` property and how to modify policies.

You can also update the policy by passing a block to {#policy}, which will call this method internally after the block completes.

@param new_policy [Policy] a new or modified Cloud IAM Policy for this

backup

@return [Policy] The policy returned by the API update operation.

@example

require "google/cloud/bigtable"

bigtable = Google::Cloud::Bigtable.new
instance = bigtable.instance "my-instance"
cluster = instance.cluster "my-cluster"

backup = cluster.backup "my-backup"

policy = backup.policy
policy.add "roles/owner", "user:owner@example.com"
updated_policy = backup.update_policy policy

puts updated_policy.roles
# File lib/google/cloud/bigtable/backup.rb, line 308
def update_policy new_policy
  ensure_service!
  grpc = service.set_backup_policy instance_id, cluster_id, backup_id, new_policy.to_grpc
  Policy.from_grpc grpc
end
Also aliased as: policy=

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/backup.rb, line 490
def ensure_service!
  raise "Must have active connection to service" unless service
end