Skip to content

Commit 243d3fa

Browse files
committed
chore: snapshot isolation sample
1 parent 33f3750 commit 243d3fa

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

samples/samples/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
google-cloud-spanner==3.50.0
1+
google-cloud-spanner==3.53.0
22
futures==3.4.0; python_version < "3"

samples/samples/snippets.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3118,6 +3118,42 @@ def directed_read_options(
31183118
print("SingerId: {}, AlbumId: {}, AlbumTitle: {}".format(*row))
31193119
# [END spanner_directed_read]
31203120

3121+
def isolation_level_options(
3122+
instance_id,
3123+
database_id,
3124+
):
3125+
from google.cloud.spanner_v1 import TransactionOptions, DefaultTransactionOptions
3126+
3127+
"""
3128+
Shows how to run a Read Write transaction with isolation level options.
3129+
"""
3130+
# [START spanner_isolation_level]
3131+
# instance_id = "your-spanner-instance"
3132+
# database_id = "your-spanner-db-id"
3133+
3134+
isolation_level_options_for_client = TransactionOptions.IsolationLevel.SERIALIZABLE
3135+
3136+
# The isolation level specified at the client level via default_transaction_options will be applied to all RW transactions
3137+
spanner_client = spanner.Client(
3138+
default_transaction_options=DefaultTransactionOptions(isolation_level=isolation_level_options_for_client)
3139+
)
3140+
instance = spanner_client.instance(instance_id)
3141+
database = instance.database(database_id)
3142+
3143+
isolation_level_options_for_request = TransactionOptions.IsolationLevel.REPEATABLE_READ
3144+
3145+
def insert_singers(transaction):
3146+
row_ct = transaction.execute_update(
3147+
"INSERT INTO Singers (SingerId, FirstName, LastName) "
3148+
" VALUES (20, 'Virginia', 'Watson')"
3149+
)
3150+
3151+
print("{} record(s) inserted.".format(row_ct))
3152+
3153+
# The isolation level specified at the request level takes precedence over the isolation level configured at the client level.
3154+
database.run_in_transaction(insert_singers, isolation_level=isolation_level_options_for_request)
3155+
# [END spanner_isolation_level]
3156+
31213157

31223158
def set_custom_timeout_and_retry(instance_id, database_id):
31233159
"""Executes a snapshot read with custom timeout and retry."""
@@ -3651,6 +3687,7 @@ def query_data_with_proto_types_parameter(instance_id, database_id):
36513687
)
36523688
enable_fine_grained_access_parser.add_argument("--title", default="condition title")
36533689
subparsers.add_parser("directed_read_options", help=directed_read_options.__doc__)
3690+
subparsers.add_parser("isolation_level_options", help=isolation_level_options.__doc__)
36543691
subparsers.add_parser(
36553692
"set_custom_timeout_and_retry", help=set_custom_timeout_and_retry.__doc__
36563693
)
@@ -3803,6 +3840,8 @@ def query_data_with_proto_types_parameter(instance_id, database_id):
38033840
)
38043841
elif args.command == "directed_read_options":
38053842
directed_read_options(args.instance_id, args.database_id)
3843+
elif args.command == "isolation_level_options":
3844+
isolation_level_options(args.instance_id, args.database_id)
38063845
elif args.command == "set_custom_timeout_and_retry":
38073846
set_custom_timeout_and_retry(args.instance_id, args.database_id)
38083847
elif args.command == "create_instance_with_autoscaling_config":

samples/samples/snippets_test.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -961,7 +961,11 @@ def test_directed_read_options(capsys, instance_id, sample_database):
961961
snippets.directed_read_options(instance_id, sample_database.database_id)
962962
out, _ = capsys.readouterr()
963963
assert "SingerId: 1, AlbumId: 1, AlbumTitle: Total Junk" in out
964-
964+
965+
def test_isolated_level_options(capsys, instance_id, sample_database):
966+
snippets.isolation_level_options(instance_id, sample_database.database_id)
967+
out, _ = capsys.readouterr()
968+
assert "1 record(s) inserted." in out
965969

966970
@pytest.mark.dependency(depends=["insert_data"])
967971
def test_set_custom_timeout_and_retry(capsys, instance_id, sample_database):

0 commit comments

Comments
 (0)