Skip to content

Commit 95af208

Browse files
tlhquynhsakthivelmanii
authored andcommitted
docs(sample): Add snippet for Repeatable Read configuration at client and transaction level.
1 parent 5f924b7 commit 95af208

File tree

2 files changed

+95
-0
lines changed

2 files changed

+95
-0
lines changed

samples/snippets/src/main/java/com/example/spanner/SpannerSample.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@
3232
import com.google.cloud.spanner.KeyRange;
3333
import com.google.cloud.spanner.KeySet;
3434
import com.google.cloud.spanner.Mutation;
35+
import com.google.cloud.spanner.Options;
3536
import com.google.cloud.spanner.ReadOnlyTransaction;
3637
import com.google.cloud.spanner.ResultSet;
3738
import com.google.cloud.spanner.Spanner;
3839
import com.google.cloud.spanner.SpannerBatchUpdateException;
3940
import com.google.cloud.spanner.SpannerException;
4041
import com.google.cloud.spanner.SpannerExceptionFactory;
4142
import com.google.cloud.spanner.SpannerOptions;
43+
import com.google.cloud.spanner.SpannerOptions.Builder.DefaultReadWriteTransactionOptions;
4244
import com.google.cloud.spanner.Statement;
4345
import com.google.cloud.spanner.Struct;
4446
import com.google.cloud.spanner.TimestampBound;
@@ -71,6 +73,7 @@
7173
import com.google.spanner.admin.database.v1.RestoreDatabaseRequest;
7274
import com.google.spanner.admin.database.v1.RestoreInfo;
7375
import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions;
76+
import com.google.spanner.v1.TransactionOptions.IsolationLevel;
7477
import java.math.BigDecimal;
7578
import java.time.Instant;
7679
import java.time.ZoneId;
@@ -1552,6 +1555,47 @@ static void queryWithQueryOptions(DatabaseClient dbClient) {
15521555
}
15531556
// [END spanner_query_with_query_options]
15541557

1558+
// [START spanner_isolation_level_settings]
1559+
static void isolationLevelSetting(DatabaseId db) {
1560+
// The isolation level specified at the client-level will be applied to all
1561+
// RW transactions.
1562+
DefaultReadWriteTransactionOptions transactionOptions =
1563+
DefaultReadWriteTransactionOptions.newBuilder()
1564+
.setIsolationLevel(IsolationLevel.SERIALIZABLE)
1565+
.build();
1566+
SpannerOptions options =
1567+
SpannerOptions.newBuilder()
1568+
.setDefaultTransactionOptions(transactionOptions)
1569+
.build();
1570+
Spanner spanner = options.getService();
1571+
DatabaseClient dbClient = spanner.getDatabaseClient(db);
1572+
dbClient
1573+
// The isolation level specified at the transaction-level takes precedence
1574+
// over the isolation level configured at the client-level.
1575+
.readWriteTransaction(Options.isolationLevel(IsolationLevel.REPEATABLE_READ))
1576+
.run(transaction -> {
1577+
// Read an AlbumTitle.
1578+
String select_sql =
1579+
"SELECT AlbumTitle from Albums WHERE SingerId = 1 and AlbumId = 1";
1580+
ResultSet resultSet = transaction.executeQuery(Statement.of(select_sql));
1581+
String title = null;
1582+
while (resultSet.next()) {
1583+
title = resultSet.getString("AlbumTitle");
1584+
}
1585+
System.out.printf("Current album title: %s\n", title);
1586+
1587+
// Update the title.
1588+
String update_sql =
1589+
"UPDATE Albums "
1590+
+ "SET AlbumTitle = 'New Album Title' "
1591+
+ "WHERE SingerId = 1 and AlbumId = 1";
1592+
long rowCount = transaction.executeUpdate(Statement.of(update_sql));
1593+
System.out.printf("%d record updated.\n", rowCount);
1594+
return null;
1595+
});
1596+
}
1597+
// [END spanner_isolation_level_settings]
1598+
15551599
// [START spanner_create_backup]
15561600
static void createBackup(DatabaseAdminClient dbAdminClient, String projectId, String instanceId,
15571601
String databaseId, String backupId, Timestamp versionTime) {
@@ -2108,6 +2152,9 @@ static void run(
21082152
case "querywithqueryoptions":
21092153
queryWithQueryOptions(dbClient);
21102154
break;
2155+
case "isolationlevelsettings":
2156+
isolationLevelSetting(database);
2157+
break;
21112158
case "createbackup":
21122159
createBackup(dbAdminClient, database.getInstanceId().getProject(),
21132160
database.getInstanceId().getInstance(), database.getDatabase(),
@@ -2218,6 +2265,7 @@ static void printUsageAndExit() {
22182265
System.err.println(" SpannerExample querywithtimestampparameter my-instance example-db");
22192266
System.err.println(" SpannerExample clientwithqueryoptions my-instance example-db");
22202267
System.err.println(" SpannerExample querywithqueryoptions my-instance example-db");
2268+
System.err.println(" SpannerExample isolationlevelsettings my-instance example-db");
22212269
System.err.println(" SpannerExample createbackup my-instance example-db");
22222270
System.err.println(" SpannerExample listbackups my-instance example-db");
22232271
System.err.println(" SpannerExample listbackupoperations my-instance example-db backup-id");

samples/snippets/src/main/java/com/example/spanner/admin/archived/SpannerSample.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
import com.google.cloud.spanner.SpannerException;
4949
import com.google.cloud.spanner.SpannerExceptionFactory;
5050
import com.google.cloud.spanner.SpannerOptions;
51+
import com.google.cloud.spanner.SpannerOptions.Builder.DefaultReadWriteTransactionOptions;
5152
import com.google.cloud.spanner.Statement;
5253
import com.google.cloud.spanner.Struct;
5354
import com.google.cloud.spanner.TimestampBound;
@@ -63,6 +64,7 @@
6364
import com.google.spanner.admin.database.v1.RestoreDatabaseMetadata;
6465
import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata;
6566
import com.google.spanner.v1.ExecuteSqlRequest.QueryOptions;
67+
import com.google.spanner.v1.TransactionOptions.IsolationLevel;
6668
import java.math.BigDecimal;
6769
import java.time.Instant;
6870
import java.util.ArrayList;
@@ -1569,6 +1571,47 @@ static void queryWithQueryOptions(DatabaseClient dbClient) {
15691571
}
15701572
// [END spanner_query_with_query_options]
15711573

1574+
// [START spanner_isolation_level_settings]
1575+
static void isolationLevelSetting(DatabaseId db) {
1576+
// The isolation level specified at the client-level will be applied to all
1577+
// RW transactions.
1578+
DefaultReadWriteTransactionOptions transactionOptions =
1579+
DefaultReadWriteTransactionOptions.newBuilder()
1580+
.setIsolationLevel(IsolationLevel.SERIALIZABLE)
1581+
.build();
1582+
SpannerOptions options =
1583+
SpannerOptions.newBuilder()
1584+
.setDefaultTransactionOptions(transactionOptions)
1585+
.build();
1586+
Spanner spanner = options.getService();
1587+
DatabaseClient dbClient = spanner.getDatabaseClient(db);
1588+
dbClient
1589+
// The isolation level specified at the transaction-level takes precedence
1590+
// over the isolation level configured at the client-level.
1591+
.readWriteTransaction(Options.isolationLevel(IsolationLevel.REPEATABLE_READ))
1592+
.run(transaction -> {
1593+
// Read an AlbumTitle.
1594+
String select_sql =
1595+
"SELECT AlbumTitle from Albums WHERE SingerId = 1 and AlbumId = 1";
1596+
ResultSet resultSet = transaction.executeQuery(Statement.of(select_sql));
1597+
String title = null;
1598+
while (resultSet.next()) {
1599+
title = resultSet.getString("AlbumTitle");
1600+
}
1601+
System.out.printf("Current album title: %s\n", title);
1602+
1603+
// Update the title.
1604+
String update_sql =
1605+
"UPDATE Albums "
1606+
+ "SET AlbumTitle = 'New Album Title' "
1607+
+ "WHERE SingerId = 1 and AlbumId = 1";
1608+
long rowCount = transaction.executeUpdate(Statement.of(update_sql));
1609+
System.out.printf("%d record updated.\n", rowCount);
1610+
return null;
1611+
});
1612+
}
1613+
// [END spanner_isolation_level_settings]
1614+
15721615
// [START spanner_create_backup]
15731616
static void createBackup(DatabaseAdminClient dbAdminClient, DatabaseId databaseId,
15741617
BackupId backupId, Timestamp versionTime) {
@@ -2073,6 +2116,9 @@ static void run(
20732116
case "querywithqueryoptions":
20742117
queryWithQueryOptions(dbClient);
20752118
break;
2119+
case "isolationlevelsettings":
2120+
isolationLevelSetting(database);
2121+
break;
20762122
case "createbackup":
20772123
createBackup(dbAdminClient, database, backup, getVersionTime(dbClient));
20782124
break;
@@ -2177,6 +2223,7 @@ static void printUsageAndExit() {
21772223
System.err.println(" SpannerExample querywithtimestampparameter my-instance example-db");
21782224
System.err.println(" SpannerExample clientwithqueryoptions my-instance example-db");
21792225
System.err.println(" SpannerExample querywithqueryoptions my-instance example-db");
2226+
System.err.println(" SpannerExample isolationlevelsettings my-instance example-db");
21802227
System.err.println(" SpannerExample createbackup my-instance example-db");
21812228
System.err.println(" SpannerExample listbackups my-instance example-db");
21822229
System.err.println(" SpannerExample listbackupoperations my-instance example-db backup-id");

0 commit comments

Comments
 (0)