Skip to content

Commit

Permalink
incorporate changes
Browse files Browse the repository at this point in the history
  • Loading branch information
rahul2393 committed Mar 4, 2024
1 parent 9ee3911 commit 4723108
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 100 deletions.
139 changes: 63 additions & 76 deletions samples/samples/backup_sample.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,18 +126,17 @@ def restore_database(instance_id, new_database_id, backup_id):
from google.cloud.spanner_admin_database_v1 import RestoreDatabaseRequest

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
database_admin_api = spanner_client.database_admin_api

# Start restoring an existing backup to a new database.
request = RestoreDatabaseRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
database_id=new_database_id,
backup="{}/backups/{}".format(
instance_admin_api.instance_path(spanner_client.project, instance_id),
backup_id,
backup=database_admin_api.backup_path(
spanner_client.project, instance_id, backup_id
),
)
operation = spanner_client.database_admin_api.restore_database(request)
operation = database_admin_api.restore_database(request)

# Wait for restore operation to complete.
db = operation.result(1600)
Expand Down Expand Up @@ -166,7 +165,7 @@ def restore_database_with_encryption_key(
RestoreDatabaseEncryptionConfig, RestoreDatabaseRequest)

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
database_admin_api = spanner_client.database_admin_api

# Start restoring an existing backup to a new database.
encryption_config = {
Expand All @@ -175,15 +174,14 @@ def restore_database_with_encryption_key(
}

request = RestoreDatabaseRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
database_id=new_database_id,
backup="{}/backups/{}".format(
instance_admin_api.instance_path(spanner_client.project, instance_id),
backup_id,
backup=database_admin_api.backup_path(
spanner_client.project, instance_id, backup_id
),
encryption_config=encryption_config,
)
operation = spanner_client.database_admin_api.restore_database(request)
operation = database_admin_api.restore_database(request)

# Wait for restore operation to complete.
db = operation.result(1600)
Expand Down Expand Up @@ -237,12 +235,9 @@ def cancel_backup(instance_id, database_id, backup_id):
try:
database_admin_api.get_backup(
backup_pb.GetBackupRequest(
name="{}/backups/{}".format(
database_admin_api.instance_path(
spanner_client.project, instance_id
),
backup_id,
)
name=database_admin_api.backup_path(
spanner_client.project, instance_id, backup_id
),
)
)
except NotFound:
Expand All @@ -251,10 +246,9 @@ def cancel_backup(instance_id, database_id, backup_id):
print("Backup was created before the cancel completed.")
database_admin_api.delete_backup(
backup_pb.DeleteBackupRequest(
name="{}/backups/{}".format(
database_admin_api.instance_path(spanner_client.project, instance_id),
backup_id,
)
name=database_admin_api.backup_path(
spanner_client.project, instance_id, backup_id
),
)
)
print("Backup deleted.")
Expand All @@ -269,7 +263,7 @@ def list_backup_operations(instance_id, database_id, backup_id):
backup as backup_pb

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
database_admin_api = spanner_client.database_admin_api

# List the CreateBackup operations.
filter_ = (
Expand All @@ -278,10 +272,10 @@ def list_backup_operations(instance_id, database_id, backup_id):
"AND (metadata.database:{})"
).format(database_id)
request = backup_pb.ListBackupOperationsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
filter=filter_,
)
operations = spanner_client.database_admin_api.list_backup_operations(request)
operations = database_admin_api.list_backup_operations(request)
for op in operations:
metadata = protobuf_helpers.from_any_pb(
backup_pb.CreateBackupMetadata, op.metadata
Expand All @@ -298,10 +292,10 @@ def list_backup_operations(instance_id, database_id, backup_id):
"AND (metadata.source_backup:{})"
).format(backup_id)
request = backup_pb.ListBackupOperationsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
filter=filter_,
)
operations = spanner_client.database_admin_api.list_backup_operations(request)
operations = database_admin_api.list_backup_operations(request)
for op in operations:
metadata = protobuf_helpers.from_any_pb(
backup_pb.CopyBackupMetadata, op.metadata
Expand All @@ -324,18 +318,18 @@ def list_database_operations(instance_id):
spanner_database_admin

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
database_admin_api = spanner_client.database_admin_api

# List the progress of restore.
filter_ = (
"(metadata.@type:type.googleapis.com/"
"google.spanner.admin.database.v1.OptimizeRestoredDatabaseMetadata)"
)
request = spanner_database_admin.ListDatabaseOperationsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
filter=filter_,
)
operations = spanner_client.database_admin_api.list_database_operations(request)
operations = database_admin_api.list_database_operations(request)
for op in operations:
metadata = protobuf_helpers.from_any_pb(
spanner_database_admin.OptimizeRestoredDatabaseMetadata, op.metadata
Expand All @@ -356,35 +350,35 @@ def list_backups(instance_id, database_id, backup_id):
backup as backup_pb

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
database_admin_api = spanner_client.database_admin_api

# List all backups.
print("All backups:")
request = backup_pb.ListBackupsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
filter="",
)
operations = spanner_client.database_admin_api.list_backups(request)
operations = database_admin_api.list_backups(request)
for backup in operations:
print(backup.name)

# List all backups that contain a name.
print('All backups with backup name containing "{}":'.format(backup_id))
request = backup_pb.ListBackupsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
filter="name:{}".format(backup_id),
)
operations = spanner_client.database_admin_api.list_backups(request)
operations = database_admin_api.list_backups(request)
for backup in operations:
print(backup.name)

# List all backups for a database that contains a name.
print('All backups with database name containing "{}":'.format(database_id))
request = backup_pb.ListBackupsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
filter="database:{}".format(database_id),
)
operations = spanner_client.database_admin_api.list_backups(request)
operations = database_admin_api.list_backups(request)
for backup in operations:
print(backup.name)

Expand All @@ -396,20 +390,20 @@ def list_backups(instance_id, database_id, backup_id):
)
)
request = backup_pb.ListBackupsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
filter='expire_time < "{}-{}-{}T{}:{}:{}Z"'.format(*expire_time.timetuple()),
)
operations = spanner_client.database_admin_api.list_backups(request)
operations = database_admin_api.list_backups(request)
for backup in operations:
print(backup.name)

# List all backups with a size greater than some bytes.
print("All backups with backup size more than 100 bytes:")
request = backup_pb.ListBackupsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
filter="size_bytes > 100",
)
operations = spanner_client.database_admin_api.list_backups(request)
operations = database_admin_api.list_backups(request)
for backup in operations:
print(backup.name)

Expand All @@ -421,12 +415,12 @@ def list_backups(instance_id, database_id, backup_id):
)
)
request = backup_pb.ListBackupsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
filter='create_time >= "{}-{}-{}T{}:{}:{}Z" AND state:READY'.format(
*create_time.timetuple()
),
)
operations = spanner_client.database_admin_api.list_backups(request)
operations = database_admin_api.list_backups(request)
for backup in operations:
print(backup.name)

Expand All @@ -435,10 +429,10 @@ def list_backups(instance_id, database_id, backup_id):
# requests will be made as needed while iterating.
paged_backups = set()
request = backup_pb.ListBackupsRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
page_size=2,
)
operations = spanner_client.database_admin_api.list_backups(request)
operations = database_admin_api.list_backups(request)
for backup in operations:
paged_backups.add(backup.name)
for backup in paged_backups:
Expand All @@ -454,38 +448,32 @@ def delete_backup(instance_id, backup_id):
backup as backup_pb

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
backup = spanner_client.database_admin_api.get_backup(
database_admin_api = spanner_client.database_admin_api
backup = database_admin_api.get_backup(
backup_pb.GetBackupRequest(
name="{}/backups/{}".format(
instance_admin_api.instance_path(spanner_client.project, instance_id),
backup_id,
)
name=database_admin_api.backup_path(
spanner_client.project, instance_id, backup_id
),
)
)

# Wait for databases that reference this backup to finish optimizing.
while backup.referencing_databases:
time.sleep(30)
backup = spanner_client.database_admin_api.get_backup(
backup = database_admin_api.get_backup(
backup_pb.GetBackupRequest(
name="{}/backups/{}".format(
instance_admin_api.instance_path(
spanner_client.project, instance_id
),
backup_id,
)
name=database_admin_api.backup_path(
spanner_client.project, instance_id, backup_id
),
)
)

# Delete the backup.
spanner_client.database_admin_api.delete_backup(
backup_pb.DeleteBackupRequest(name=backup.name)
)
database_admin_api.delete_backup(backup_pb.DeleteBackupRequest(name=backup.name))

# Verify that the backup is deleted.
try:
backup = spanner_client.database_admin_api.get_backup(
backup = database_admin_api.get_backup(
backup_pb.GetBackupRequest(name=backup.name)
)
except NotFound:
Expand All @@ -502,22 +490,21 @@ def update_backup(instance_id, backup_id):
backup as backup_pb

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
database_admin_api = spanner_client.database_admin_api

backup = spanner_client.database_admin_api.get_backup(
backup = database_admin_api.get_backup(
backup_pb.GetBackupRequest(
name="{}/backups/{}".format(
instance_admin_api.instance_path(spanner_client.project, instance_id),
backup_id,
)
name=database_admin_api.backup_path(
spanner_client.project, instance_id, backup_id
),
)
)

# Expire time must be within 366 days of the create time of the backup.
old_expire_time = backup.expire_time
# New expire time should be less than the max expire time
new_expire_time = min(backup.max_expire_time, old_expire_time + timedelta(days=30))
spanner_client.database_admin_api.update_backup(
database_admin_api.update_backup(
backup_pb.UpdateBackupRequest(
backup=backup_pb.Backup(name=backup.name, expire_time=new_expire_time),
update_mask={"paths": ["expire_time"]},
Expand All @@ -543,7 +530,7 @@ def create_database_with_version_retention_period(
spanner_database_admin

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
database_admin_api = spanner_client.database_admin_api
ddl_statements = [
"CREATE TABLE Singers ("
+ " SingerId INT64 NOT NULL,"
Expand All @@ -562,9 +549,9 @@ def create_database_with_version_retention_period(
database_id, retention_period
),
]
operation = spanner_client.database_admin_api.create_database(
operation = database_admin_api.create_database(
request=spanner_database_admin.CreateDatabaseRequest(
parent=instance_admin_api.instance_path(
parent=database_admin_api.instance_path(
spanner_client.project, instance_id
),
create_statement="CREATE DATABASE `{}`".format(database_id),
Expand All @@ -579,7 +566,7 @@ def create_database_with_version_retention_period(
)
)

spanner_client.database_admin_api.drop_database(
database_admin_api.drop_database(
spanner_database_admin.DropDatabaseRequest(database=db.name)
)

Expand All @@ -595,18 +582,18 @@ def copy_backup(instance_id, backup_id, source_backup_path):
backup as backup_pb

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
database_admin_api = spanner_client.database_admin_api

# Create a backup object and wait for copy backup operation to complete.
expire_time = datetime.utcnow() + timedelta(days=14)
request = backup_pb.CopyBackupRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
backup_id=backup_id,
source_backup=source_backup_path,
expire_time=expire_time,
)

operation = spanner_client.database_admin_api.copy_backup(request)
operation = database_admin_api.copy_backup(request)

# Wait for backup operation to complete.
copy_backup = operation.result(2100)
Expand Down
6 changes: 3 additions & 3 deletions samples/samples/pg_snippets.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,15 +73,15 @@ def create_database(instance_id, database_id):
spanner_database_admin

spanner_client = spanner.Client()
instance_admin_api = spanner_client.instance_admin_api
database_admin_api = spanner_client.database_admin_api

request = spanner_database_admin.CreateDatabaseRequest(
parent=instance_admin_api.instance_path(spanner_client.project, instance_id),
parent=database_admin_api.instance_path(spanner_client.project, instance_id),
create_statement=f'CREATE DATABASE "{database_id}"',
database_dialect=DatabaseDialect.POSTGRESQL,
)

operation = spanner_client.database_admin_api.create_database(request=request)
operation = database_admin_api.create_database(request=request)

print("Waiting for operation to complete...")
database = operation.result(OPERATION_TIMEOUT_SECONDS)
Expand Down

0 comments on commit 4723108

Please sign in to comment.