From 4ef20f01b23d9ce7d624e15d33d826dd58f35697 Mon Sep 17 00:00:00 2001 From: rahul yadav Date: Wed, 6 Mar 2024 15:13:48 +0530 Subject: [PATCH 1/2] docs: add sample for managed autoscaler --- samples/samples/snippets.py | 54 ++++++++++++++++++++++++++++++++ samples/samples/snippets_test.py | 12 +++++++ 2 files changed, 66 insertions(+) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 5cd1cc8e8b..31c7e2dc9c 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3017,6 +3017,58 @@ def directed_read_options( # [END spanner_directed_read] +# [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( + autoscaling_limits=spanner_instance_admin.AutoscalingConfig.AutoscalingLimits( + min_nodes=1, + max_nodes=2, + ), + autoscaling_targets=spanner_instance_admin.AutoscalingConfig.AutoscalingTargets( + high_priority_cpu_utilization_percent=65, + storage_utilization_percent=95, + ), + ) + + 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 @@ -3290,3 +3342,5 @@ def directed_read_options( ) elif args.command == "directed_read_options": directed_read_options(args.instance_id, args.database_id) + elif args.command == "create_instance_with_autoscaling_config": + create_instance_with_autoscaling_config(args.instance_id) diff --git a/samples/samples/snippets_test.py b/samples/samples/snippets_test.py index 6942f8fa79..1b1bba8f7b 100644 --- a/samples/samples/snippets_test.py +++ b/samples/samples/snippets_test.py @@ -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() From e4dafecbcac3fdcaf163c27b75030753f12bc159 Mon Sep 17 00:00:00 2001 From: rahul yadav Date: Thu, 7 Mar 2024 11:38:47 +0530 Subject: [PATCH 2/2] incorporate suggestions --- samples/samples/snippets.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 31c7e2dc9c..fefa6e1a86 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -3030,16 +3030,22 @@ def create_instance_with_autoscaling_config(instance_id): ) 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,