Skip to content

Commit

Permalink
docs: add sample for managed autoscaler (#1111)
Browse files Browse the repository at this point in the history
* docs: add sample for managed autoscaler

* incorporate suggestions

---------

Co-authored-by: Sri Harsha CH <57220027+harshachinta@users.noreply.github.com>
  • Loading branch information
rahul2393 and harshachinta committed Mar 7, 2024
1 parent ccdd592 commit e73c671
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 1 deletion.
63 changes: 62 additions & 1 deletion samples/samples/snippets.py
Expand Up @@ -3043,8 +3043,8 @@ def directed_read_options(
def set_custom_timeout_and_retry(instance_id, database_id):
"""Executes a snapshot read with custom timeout and retry."""
# [START spanner_set_custom_timeout_and_retry]
from google.api_core import retry
from google.api_core import exceptions as core_exceptions
from google.api_core import retry

# instance_id = "your-spanner-instance"
# database_id = "your-spanner-db-id"
Expand Down Expand Up @@ -3085,6 +3085,65 @@ def set_custom_timeout_and_retry(instance_id, database_id):
# [END spanner_set_custom_timeout_and_retry]


# [START spanner_create_instance_with_autoscaling_config]
def create_instance_with_autoscaling_config(instance_id):
"""Creates a Cloud Spanner instance with an autoscaling configuration."""
from google.cloud.spanner_admin_instance_v1.types import \
spanner_instance_admin

spanner_client = spanner.Client()

config_name = "{}/instanceConfigs/regional-us-central1".format(
spanner_client.project_name
)

autoscaling_config = spanner_instance_admin.AutoscalingConfig(
# Only one of minNodes/maxNodes or minProcessingUnits/maxProcessingUnits can be set.
autoscaling_limits=spanner_instance_admin.AutoscalingConfig.AutoscalingLimits(
min_nodes=1,
max_nodes=2,
),
# highPriorityCpuUtilizationPercent and storageUtilizationPercent are both
# percentages and must lie between 0 and 100.
autoscaling_targets=spanner_instance_admin.AutoscalingConfig.AutoscalingTargets(
high_priority_cpu_utilization_percent=65,
storage_utilization_percent=95,
),
)

# Creates a new instance with autoscaling configuration
# When autoscalingConfig is enabled, nodeCount and processingUnits fields
# need not be specified.
request = spanner_instance_admin.CreateInstanceRequest(
parent=spanner_client.project_name,
instance_id=instance_id,
instance=spanner_instance_admin.Instance(
config=config_name,
display_name="This is a display name.",
autoscaling_config=autoscaling_config,
labels={
"cloud_spanner_samples": "true",
"sample_name": "snippets-create_instance_with_autoscaling_config",
"created": str(int(time.time())),
},
),
)

operation = spanner_client.instance_admin_api.create_instance(request=request)

print("Waiting for operation to complete...")
instance = operation.result(OPERATION_TIMEOUT_SECONDS)

print(
"Created instance {} with {} autoscaling config".format(
instance_id, instance.autoscaling_config
)
)


# [END spanner_create_instance_with_autoscaling_config]


if __name__ == "__main__": # noqa: C901
parser = argparse.ArgumentParser(
description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter
Expand Down Expand Up @@ -3366,3 +3425,5 @@ def set_custom_timeout_and_retry(instance_id, database_id):
directed_read_options(args.instance_id, args.database_id)
elif args.command == "set_custom_timeout_and_retry":
set_custom_timeout_and_retry(args.instance_id, args.database_id)
elif args.command == "create_instance_with_autoscaling_config":
create_instance_with_autoscaling_config(args.instance_id)
12 changes: 12 additions & 0 deletions samples/samples/snippets_test.py
Expand Up @@ -154,6 +154,18 @@ def test_create_instance_with_processing_units(capsys, lci_instance_id):
retry_429(instance.delete)()


def test_create_instance_with_autoscaling_config(capsys, lci_instance_id):
retry_429(snippets.create_instance_with_autoscaling_config)(
lci_instance_id,
)
out, _ = capsys.readouterr()
assert lci_instance_id in out
assert "autoscaling config" in out
spanner_client = spanner.Client()
instance = spanner_client.instance(lci_instance_id)
retry_429(instance.delete)()


def test_update_database(capsys, instance_id, sample_database):
snippets.update_database(instance_id, sample_database.database_id)
out, _ = capsys.readouterr()
Expand Down

0 comments on commit e73c671

Please sign in to comment.