Class: Google::Cloud::Bigtable::Backup

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

Overview

Backup

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

Examples:

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

Defined Under Namespace

Classes: Job, List

Instance Method Summary collapse

Instance Method Details

#backup_idString

The unique identifier for the backup.

Returns:

  • (String)


98
99
100
# File 'lib/google/cloud/bigtable/backup.rb', line 98

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

#cluster_idString

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

Returns:

  • (String)


89
90
91
# File 'lib/google/cloud/bigtable/backup.rb', line 89

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

#copy(dest_project_id:, dest_instance_id:, dest_cluster_id:, new_backup_id:, expire_time:) ⇒ Google::Cloud::Bigtable::Backup::Job

Creates a copy of the backup at the desired location. Copy of the backup won't be created if the backup is already a copied one.

Examples:

Create a copy of the backup at a specific location

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.copy dest_project_id:"my-project-2",
                  dest_instance_id:"my-instance-2",
                  dest_cluster_id:"my-cluster-2",
                  new_backup_id:"my-backup-2",
                  expire_time: Time.now + 60 * 60 * 7

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

if job.error?
  status = job.error
else
  backup = job.backup
end

Parameters:

  • dest_project_id (String)

    Existing project ID. Copy of the backup will be created in this project. Required.

  • dest_instance_id (Instance, String)

    Existing instance ID. Copy of the backup will be created in this instance. Required.

  • dest_cluster_id (String)

    Existing cluster ID. Copy of the backup will be created in this cluster. Required.

  • new_backup_id (String)

    The id of the copy of the backup to be created. This string must be between 1 and 50 characters in length and match the regex [_a-zA-Z0-9][-_.a-zA-Z0-9]*. Required.

  • expire_time (Time)

    The expiration time of the copy 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. Required.

Returns:



472
473
474
475
476
477
478
479
480
# File 'lib/google/cloud/bigtable/backup.rb', line 472

def copy dest_project_id:, dest_instance_id:, dest_cluster_id:, new_backup_id:, expire_time:
  grpc = service.copy_backup project_id: dest_project_id,
                             instance_id: dest_instance_id,
                             cluster_id: dest_cluster_id,
                             backup_id: new_backup_id,
                             source_backup: service.backup_path(instance_id, cluster_id, backup_id),
                             expire_time: expire_time
  Backup::Job.from_grpc grpc, service
end

#creating?Boolean

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

Returns:

  • (Boolean)


209
210
211
# File 'lib/google/cloud/bigtable/backup.rb', line 209

def creating?
  state == :CREATING
end

#deleteBoolean

Permanently deletes the backup.

Examples:

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

Returns:

  • (Boolean)

    Returns true if the backup was deleted.



535
536
537
538
539
# File 'lib/google/cloud/bigtable/backup.rb', line 535

def delete
  ensure_service!
  service.delete_backup instance_id, cluster_id, backup_id
  true
end

#encryption_infoGoogle::Cloud::Bigtable::EncryptionInfo

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

Examples:

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

Returns:



239
240
241
# File 'lib/google/cloud/bigtable/backup.rb', line 239

def encryption_info
  EncryptionInfo.from_grpc @grpc.encryption_info
end

#end_timeTime

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

Returns:

  • (Time)


182
183
184
# File 'lib/google/cloud/bigtable/backup.rb', line 182

def end_time
  Convert.timestamp_to_time @grpc.end_time
end

#expire_timeTime

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.

Returns:

  • (Time)


152
153
154
# File 'lib/google/cloud/bigtable/backup.rb', line 152

def expire_time
  Convert.timestamp_to_time @grpc.expire_time
end

#expire_time=(new_expire_time) ⇒ Object

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.

Parameters:

  • new_expire_time (Time)

    The new expiration time of the backup.



163
164
165
# File 'lib/google/cloud/bigtable/backup.rb', line 163

def expire_time= new_expire_time
  @grpc.expire_time = Convert.time_to_timestamp new_expire_time
end

#instance_idString

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

Returns:

  • (String)


80
81
82
# File 'lib/google/cloud/bigtable/backup.rb', line 80

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

#pathString

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

Returns:

  • (String)


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

def path
  @grpc.name
end

#policy {|policy| ... } ⇒ Policy

Gets the Cloud IAM access control policy for the backup.

Examples:

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

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:[email protected]"
end # 2 API calls

Yields:

  • (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.

Yield Parameters:

  • policy (Policy)

    the current Cloud IAM Policy for this backup.

Returns:

  • (Policy)

    The current Cloud IAM Policy for the backup.

See Also:



282
283
284
285
286
287
288
289
# File 'lib/google/cloud/bigtable/backup.rb', line 282

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

#project_idString

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

Returns:

  • (String)


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

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

#ready?Boolean

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

Returns:

  • (Boolean)


218
219
220
# File 'lib/google/cloud/bigtable/backup.rb', line 218

def ready?
  state == :READY
end

#reload!Google::Cloud::Bigtable::Backup

Reloads backup data.



514
515
516
517
# File 'lib/google/cloud/bigtable/backup.rb', line 514

def reload!
  @grpc = service.get_backup instance_id, cluster_id, backup_id
  self
end

#restore(table_id, instance: nil) ⇒ Google::Cloud::Bigtable::Table::RestoreJob

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.

Examples:

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

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

Parameters:

  • table_id (String)

    The table ID for the new table. This table must not yet exist. Required.

  • instance (Instance, String) (defaults to: nil)

    The instance or the ID of the instance for the new table, if different from the instance of the backup. Optional.

Returns:



417
418
419
420
421
422
423
424
425
# File 'lib/google/cloud/bigtable/backup.rb', line 417

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

#saveBoolean Also known as: update

Updates the backup.

expire_time is the only updatable field.

Examples:

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

Returns:

  • (Boolean)

    Returns true if the update succeeded.



502
503
504
505
506
# File 'lib/google/cloud/bigtable/backup.rb', line 502

def save
  ensure_service!
  @grpc = service.update_backup @grpc, [:expire_time]
  true
end

#size_bytesInteger

The size of the backup in bytes.

Returns:

  • (Integer)


191
192
193
# File 'lib/google/cloud/bigtable/backup.rb', line 191

def size_bytes
  @grpc.size_bytes
end

#source_backupString

The name of the backup from which this backup is copied. Value will be empty if its not a copied backup and of the form - projects/<project>/instances/<instance>/clusters/<cluster>/backups/<source_backup> if this is a copied backup.

Returns:

  • (String)


120
121
122
# File 'lib/google/cloud/bigtable/backup.rb', line 120

def source_backup
  @grpc.source_backup
end

#source_table(perform_lookup: nil, view: nil) ⇒ Table

The table from which this backup was created.

Parameters:

  • perform_lookup (Boolean) (defaults to: nil)

    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.

  • view (Symbol) (defaults to: nil)

    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.

Returns:



139
140
141
142
143
# File 'lib/google/cloud/bigtable/backup.rb', line 139

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_timeTime

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.

Returns:

  • (Time)


173
174
175
# File 'lib/google/cloud/bigtable/backup.rb', line 173

def start_time
  Convert.timestamp_to_time @grpc.start_time
end

#stateSymbol

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

Returns:

  • (Symbol)


200
201
202
# File 'lib/google/cloud/bigtable/backup.rb', line 200

def state
  @grpc.state
end

#test_iam_permissions(*permissions) ⇒ Array<String>

Tests the specified permissions against the Cloud IAM access control policy.

Examples:

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

Parameters:

  • 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.

Returns:

  • (Array<String>)

    The permissions that are configured for the policy.

See Also:



357
358
359
360
361
# File 'lib/google/cloud/bigtable/backup.rb', line 357

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_policy(new_policy) ⇒ Policy Also known as: policy=

Updates the Cloud IAM access control policy for the backup. The policy should be read from #policy. See 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.

Examples:

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:[email protected]"
updated_policy = backup.update_policy policy

puts updated_policy.roles

Parameters:

  • new_policy (Policy)

    a new or modified Cloud IAM Policy for this backup

Returns:

  • (Policy)

    The policy returned by the API update operation.



320
321
322
323
324
# File 'lib/google/cloud/bigtable/backup.rb', line 320

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