From 9a61d78bf6322cec893450f525eebe2d5b06bce7 Mon Sep 17 00:00:00 2001 From: Alka Trivedi Date: Fri, 23 May 2025 10:40:36 +0530 Subject: [PATCH] chore: add samples for transaction timeout configuration --- samples/samples/snippets.py | 36 ++++++++++++++++++++++++++++++++ samples/samples/snippets_test.py | 7 +++++++ 2 files changed, 43 insertions(+) diff --git a/samples/samples/snippets.py b/samples/samples/snippets.py index 4b4d7b5a2e..f55e456bec 100644 --- a/samples/samples/snippets.py +++ b/samples/samples/snippets.py @@ -2510,6 +2510,36 @@ def update_venues(transaction): # [END spanner_set_transaction_tag] +def set_transaction_timeout(instance_id, database_id): + """Executes a transaction with a transaction timeout.""" + # [START spanner_transaction_timeout] + # instance_id = "your-spanner-instance" + # database_id = "your-spanner-db-id" + spanner_client = spanner.Client() + instance = spanner_client.instance(instance_id) + database = instance.database(database_id) + + def read_then_write(transaction): + # Read records. + results = transaction.execute_sql( + "SELECT SingerId, FirstName, LastName FROM Singers ORDER BY LastName, FirstName" + ) + for result in results: + print("SingerId: {}, FirstName: {}, LastName: {}".format(*result)) + + # Insert a record. + row_ct = transaction.execute_update( + "INSERT INTO Singers (SingerId, FirstName, LastName) " + " VALUES (100, 'George', 'Washington')" + ) + print("{} record(s) inserted.".format(row_ct)) + + # configure transaction timeout to 60 seconds + database.run_in_transaction(read_then_write, timeout_secs=60) + + # [END spanner_transaction_timeout] + + def set_request_tag(instance_id, database_id): """Executes a snapshot read with a request tag.""" # [START spanner_set_request_tag] @@ -3272,6 +3302,7 @@ def update_instance_default_backup_schedule_type(instance_id): print("Updated instance {} to have default backup schedules".format(instance_id)) + # [END spanner_update_instance_default_backup_schedule_type] @@ -3617,6 +3648,9 @@ def add_split_points(instance_id, database_id): subparsers.add_parser("add_column", help=add_column.__doc__) subparsers.add_parser("update_data", help=update_data.__doc__) subparsers.add_parser("set_max_commit_delay", help=set_max_commit_delay.__doc__) + subparsers.add_parser( + "set_transaction_timeout", help=set_transaction_timeout.__doc__ + ) subparsers.add_parser( "query_data_with_new_column", help=query_data_with_new_column.__doc__ ) @@ -3783,6 +3817,8 @@ def add_split_points(instance_id, database_id): update_data(args.instance_id, args.database_id) elif args.command == "set_max_commit_delay": set_max_commit_delay(args.instance_id, args.database_id) + elif args.command == "set_transaction_timeout": + set_transaction_timeout(args.instance_id, args.database_id) elif args.command == "query_data_with_new_column": query_data_with_new_column(args.instance_id, args.database_id) elif args.command == "read_write_transaction": diff --git a/samples/samples/snippets_test.py b/samples/samples/snippets_test.py index eb61e8bd1f..3fcd16755c 100644 --- a/samples/samples/snippets_test.py +++ b/samples/samples/snippets_test.py @@ -855,6 +855,13 @@ def test_set_transaction_tag(capsys, instance_id, sample_database): assert "New venue inserted." in out +@pytest.mark.dependency(depends=["insert_datatypes_data"]) +def test_set_transaction_timeout(capsys, instance_id, sample_database): + snippets.set_transaction_timeout(instance_id, sample_database.database_id) + out, _ = capsys.readouterr() + assert "1 record(s) inserted." in out + + @pytest.mark.dependency(depends=["insert_data"]) def test_set_request_tag(capsys, instance_id, sample_database): snippets.set_request_tag(instance_id, sample_database.database_id)