From edc5bbf0d9d4faf48fd9a8d479d5bc5de938c82d Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Mon, 6 Feb 2023 13:29:38 +0530 Subject: [PATCH 01/16] fix: prevent illegal negative timeout values into thread sleep() method while retrying exceptions in unit tests. * For details on issue see - https://github.com/googleapis/java-spanner/issues/2206 --- .../com/google/cloud/spanner/it/ITClosedSessionTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java index aeb0256285..227611a10d 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java @@ -251,7 +251,10 @@ public void testTransactionManager() throws InterruptedException { break; } } catch (AbortedException e) { - Thread.sleep(e.getRetryDelayInMillis()); + long retryDelayInMillis = e.getRetryDelayInMillis(); + if(retryDelayInMillis > 0) { + Thread.sleep(retryDelayInMillis); + } txn = manager.resetForRetry(); } } From 4cd497b05eab3e3b6b89b582bfafde80d42c1518 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Wed, 8 Feb 2023 15:27:18 +0530 Subject: [PATCH 02/16] Fixing lint issues. --- .../java/com/google/cloud/spanner/it/ITClosedSessionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java index 227611a10d..efbffcfa89 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITClosedSessionTest.java @@ -252,7 +252,7 @@ public void testTransactionManager() throws InterruptedException { } } catch (AbortedException e) { long retryDelayInMillis = e.getRetryDelayInMillis(); - if(retryDelayInMillis > 0) { + if (retryDelayInMillis > 0) { Thread.sleep(retryDelayInMillis); } txn = manager.resetForRetry(); From c249a05e8b43a47c200fb488dfa4d5023ee008de Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 30 Nov 2023 00:18:59 +0530 Subject: [PATCH 03/16] chore: adding a few samples with auto-gen clients. --- .../CreateDatabaseAutogenerationSample.java | 66 +++++++++++++++++++ .../CreateInstanceAutogenerationExample.java | 61 +++++++++++++++++ 2 files changed, 127 insertions(+) create mode 100644 samples/snippets/src/main/java/com/example/spanner/CreateDatabaseAutogenerationSample.java create mode 100644 samples/snippets/src/main/java/com/example/spanner/CreateInstanceAutogenerationExample.java diff --git a/samples/snippets/src/main/java/com/example/spanner/CreateDatabaseAutogenerationSample.java b/samples/snippets/src/main/java/com/example/spanner/CreateDatabaseAutogenerationSample.java new file mode 100644 index 0000000000..2ae2e2d4ce --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/CreateDatabaseAutogenerationSample.java @@ -0,0 +1,66 @@ +package com.example.spanner; + +//[START spanner_create_database_with_default_leader] + +import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.SpannerException; +import com.google.cloud.spanner.SpannerExceptionFactory; +import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; +import com.google.common.collect.ImmutableList; +import com.google.spanner.admin.database.v1.CreateDatabaseMetadata; +import com.google.spanner.admin.database.v1.CreateDatabaseRequest; +import com.google.spanner.admin.database.v1.Database; +import java.io.IOException; +import java.util.concurrent.ExecutionException; + +public class CreateDatabaseAutogenerationSample { + + static void createDatabaseWithDefaultLeader() throws IOException { + // TODO(developer): Replace these variables before running the sample. + final String projectId = "my-project"; + final String instanceId = "my-instance"; + final String databaseId = "my-database"; + final String defaultLeader = "my-default-leader"; + createDatabaseWithDefaultLeader(projectId, instanceId, databaseId, defaultLeader); + } + + static void createDatabaseWithDefaultLeader( + String projectId, String instanceId, String databaseId, String defaultLeader) throws IOException { + DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create(); + + try { + OperationFuture op2 = + databaseAdminClient.createDatabaseAsync( + CreateDatabaseRequest.newBuilder() + .setParent(instanceId) + .setCreateStatement("CREATE DATABASE " + databaseId) + .addAllExtraStatements( + ImmutableList.of("CREATE TABLE Singers (" + + " SingerId INT64 NOT NULL," + + " FirstName STRING(1024)," + + " LastName STRING(1024)," + + " SingerInfo BYTES(MAX)" + + ") PRIMARY KEY (SingerId)", + "CREATE TABLE Albums (" + + " SingerId INT64 NOT NULL," + + " AlbumId INT64 NOT NULL," + + " AlbumTitle STRING(MAX)" + + ") PRIMARY KEY (SingerId, AlbumId)," + + " INTERLEAVE IN PARENT Singers ON DELETE CASCADE", + "ALTER DATABASE " + "`" + databaseId + "`" + + " SET OPTIONS ( default_leader = '" + defaultLeader + "' )")) + .build()); + Database createdDatabase = op2.get(); + System.out.println("Created database [" + createdDatabase.getName() + "]"); + System.out.println("\tDefault leader: " + createdDatabase.getDefaultLeader()); + } catch (ExecutionException e) { + // If the operation failed during execution, expose the cause. + throw (SpannerException) e.getCause(); + } catch (InterruptedException e) { + // Throw when a thread is waiting, sleeping, or otherwise occupied, + // and the thread is interrupted, either before or during the activity. + throw SpannerExceptionFactory.propagateInterrupt(e); + } + } +} +//[END spanner_create_database_with_default_leader] diff --git a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceAutogenerationExample.java b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceAutogenerationExample.java new file mode 100644 index 0000000000..a082422567 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceAutogenerationExample.java @@ -0,0 +1,61 @@ +package com.example.spanner; + +//[START spanner_create_instance] +import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; +import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; +import com.google.spanner.admin.instance.v1.CreateInstanceRequest; +import com.google.spanner.admin.instance.v1.Instance; +import com.google.spanner.admin.instance.v1.ProjectName; +import java.io.IOException; +import java.util.concurrent.ExecutionException; + +class CreateInstanceAutogenerationExample { + + static void createInstance() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project"; + String instanceId = "my-instance"; + createInstance(projectId, instanceId); + } + + static void createInstance(String projectId, String instanceId) throws IOException { + InstanceAdminSettings instanceAdminSettings = + InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); + InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(instanceAdminSettings); + + + // Set Instance configuration. + int nodeCount = 2; + String displayName = "Descriptive name"; + + // Create an Instance object that will be used to create the instance. + Instance instance = + Instance.newBuilder() + .setDisplayName(displayName) + .setNodeCount(nodeCount) + .setConfig(projectId + "/instanceConfigs/regional-us-central1") + .build(); + OperationFuture operation = + instanceAdminClient.createInstanceAsync( + CreateInstanceRequest.newBuilder() + .setParent(ProjectName.of(projectId).toString()) + .setInstanceId(instanceId) + .setInstance(instance) + .build()); + + try { + // Wait for the createInstance operation to finish. + Instance createdInstance = operation.get(); + System.out.printf("Instance %s was successfully created%n", createdInstance.getName()); + } catch (ExecutionException e) { + System.out.printf( + "Error: Creating instance %s failed with error message %s%n", + instance.getName(), e.getMessage()); + } catch (InterruptedException e) { + System.out.println("Error: Waiting for createInstance operation to finish was interrupted"); + } + } +} +//[END spanner_create_instance] From 6eb9f2d928b08dfcb22eeab7825ea53ba1899d9f Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Mon, 18 Dec 2023 17:00:51 +0530 Subject: [PATCH 04/16] chore: adding integration tests for samples. --- ...reateDatabaseWithDefaultLeaderSample.java} | 4 +- .../CreateInstanceSample.java} | 4 +- ...eateDatabaseWithDefaultLeaderSampleIT.java | 45 ++++++++ .../spanner/v2/CreateInstanceSampleIT.java | 9 ++ .../example/spanner/v2/SampleTestBaseV2.java | 105 ++++++++++++++++++ 5 files changed, 163 insertions(+), 4 deletions(-) rename samples/snippets/src/main/java/com/example/spanner/{CreateDatabaseAutogenerationSample.java => v2/CreateDatabaseWithDefaultLeaderSample.java} (97%) rename samples/snippets/src/main/java/com/example/spanner/{CreateInstanceAutogenerationExample.java => v2/CreateInstanceSample.java} (97%) create mode 100644 samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java create mode 100644 samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java create mode 100644 samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java diff --git a/samples/snippets/src/main/java/com/example/spanner/CreateDatabaseAutogenerationSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java similarity index 97% rename from samples/snippets/src/main/java/com/example/spanner/CreateDatabaseAutogenerationSample.java rename to samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java index 2ae2e2d4ce..3fbc629987 100644 --- a/samples/snippets/src/main/java/com/example/spanner/CreateDatabaseAutogenerationSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java @@ -1,4 +1,4 @@ -package com.example.spanner; +package com.example.spanner.v2; //[START spanner_create_database_with_default_leader] @@ -13,7 +13,7 @@ import java.io.IOException; import java.util.concurrent.ExecutionException; -public class CreateDatabaseAutogenerationSample { +public class CreateDatabaseWithDefaultLeaderSample { static void createDatabaseWithDefaultLeader() throws IOException { // TODO(developer): Replace these variables before running the sample. diff --git a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceAutogenerationExample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java similarity index 97% rename from samples/snippets/src/main/java/com/example/spanner/CreateInstanceAutogenerationExample.java rename to samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java index a082422567..c8e2ccfee1 100644 --- a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceAutogenerationExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java @@ -1,4 +1,4 @@ -package com.example.spanner; +package com.example.spanner.v2; //[START spanner_create_instance] import com.google.api.gax.longrunning.OperationFuture; @@ -11,7 +11,7 @@ import java.io.IOException; import java.util.concurrent.ExecutionException; -class CreateInstanceAutogenerationExample { +class CreateInstanceSample { static void createInstance() throws IOException { // TODO(developer): Replace these variables before running the sample. diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java new file mode 100644 index 0000000000..978ba258fb --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java @@ -0,0 +1,45 @@ +package com.example.spanner.v2; + +import static org.junit.Assert.assertTrue; + +import com.example.spanner.SampleRunner; +import com.google.spanner.admin.instance.v1.InstanceConfig; +import com.google.spanner.admin.instance.v1.InstanceName; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class CreateDatabaseWithDefaultLeaderSampleIT extends SampleTestBaseV2 { + + @Test + public void testCreateDatabaseWithDefaultLeader() throws Exception { + final String databaseId = idGenerator.generateDatabaseId(); + + // Finds possible default leader + final String instanceConfigId = instanceAdminClient.getInstance( + InstanceName.of(projectId, multiRegionalInstanceId)).getConfig(); + final InstanceConfig config = instanceAdminClient.getInstanceConfig(instanceConfigId); + assertTrue( + "Expected instance config " + instanceConfigId + " to have at least one leader option", + config.getLeaderOptionsCount() > 0 + ); + final String defaultLeader = config.getLeaderOptions(0); + + // Runs sample + final String out = SampleRunner.runSample(() -> + CreateDatabaseWithDefaultLeaderSample.createDatabaseWithDefaultLeader( + projectId, + multiRegionalInstanceId, + databaseId, + defaultLeader + ) + ); + + assertTrue( + "Expected created database to have default leader " + defaultLeader + "." + + " Output received was " + out, + out.contains("Default leader: " + defaultLeader) + ); + } +} diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java new file mode 100644 index 0000000000..3bb422bf7e --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java @@ -0,0 +1,9 @@ +package com.example.spanner.v2; + +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class CreateInstanceSampleIT extends SampleTestBaseV2 { + +} diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java new file mode 100644 index 0000000000..2495663148 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java @@ -0,0 +1,105 @@ +package com.example.spanner.v2; + +import com.example.spanner.SampleIdGenerator; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; +import java.io.IOException; +import org.junit.AfterClass; +import org.junit.BeforeClass; + +/** + * Base class for sample integration intests using auto-generated admin clients. + */ +public class SampleTestBaseV2 { + + private static final String BASE_DATABASE_ID = + System.getProperty("spanner.sample.database", "sampledb"); + private static final String BASE_BACKUP_ID = "samplebk"; + private static final String BASE_INSTANCE_CONFIG_ID = "sampleconfig"; + + protected static String projectId; + protected static final String instanceId = System.getProperty("spanner.test.instance"); + protected static DatabaseAdminClient databaseAdminClient; + protected static InstanceAdminClient instanceAdminClient; + + protected static final String multiRegionalInstanceId = + System.getProperty("spanner.test.instance.mr"); + protected static final String instanceConfigName = System + .getProperty("spanner.test.instance.config"); + protected static SampleIdGenerator idGenerator; + + @BeforeClass + public static void beforeClass() throws IOException { + final String serverUrl = ""; + final SpannerOptions.Builder optionsBuilder = SpannerOptions + .newBuilder() + .setAutoThrottleAdministrativeRequests(); + if (!serverUrl.isEmpty()) { + optionsBuilder.setHost(serverUrl); + } + final SpannerOptions options = optionsBuilder.build(); + projectId = options.getProjectId(); + databaseAdminClient = DatabaseAdminClient.create(); + instanceAdminClient = InstanceAdminClient.create(); + idGenerator = new SampleIdGenerator(BASE_DATABASE_ID, BASE_BACKUP_ID, BASE_INSTANCE_CONFIG_ID); + } + + @AfterClass + public static void afterClass() { + for (String databaseId : idGenerator.getDatabaseIds()) { + System.out.println("Trying to drop " + databaseId); + try { + // If the database is not found, it is ignored (no exception is thrown) + databaseAdminClient.dropDatabase( + getDatabaseName(projectId, instanceId, databaseId)); + databaseAdminClient.dropDatabase( + getDatabaseName(projectId, multiRegionalInstanceId, databaseId)); + } catch (Exception e) { + System.out.println( + "Failed to drop database " + + databaseId + + " due to " + + e.getMessage() + + ", skipping..."); + } + } + for (String backupId : idGenerator.getBackupIds()) { + try { + // If the backup is not found, it is ignored (no exception is thrown) + databaseAdminClient.deleteBackup( + getBackupName(projectId, instanceId, backupId)); + databaseAdminClient.deleteBackup( + getBackupName(projectId, multiRegionalInstanceId, backupId)); + } catch (Exception e) { + System.out.println( + "Failed to delete backup " + backupId + " due to " + e.getMessage() + ", skipping..."); + } + } + for (String configId : idGenerator.getInstanceConfigIds()) { + try { + // If the config is not found, it is ignored (no exception is thrown) + instanceAdminClient.deleteInstanceConfig(configId); + } catch (Exception e) { + System.out.println( + "Failed to delete instance config " + + configId + + " due to " + + e.getMessage() + + ", skipping..."); + } + } + } + + private static String getDatabaseName(final String projectId, + final String instanceId, final String databaseId) { + return String.format( + "projects/%s/instances/%s/databases/%s", projectId, instanceId, databaseId); + } + + private static String getBackupName(final String projectId, + final String instanceId, final String backupId) { + return String.format( + "projects/%s/instances/%s/backups/%s", projectId, instanceId, backupId); + } +} From e2baca954f4ea233a9d1db69177decfddb7dfec7 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 13:10:18 +0530 Subject: [PATCH 05/16] chore: fixing the end-point for staging. --- ...reateDatabaseWithDefaultLeaderSampleIT.java | 1 + .../example/spanner/v2/SampleTestBaseV2.java | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java index 978ba258fb..5e6abf7d19 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java @@ -17,6 +17,7 @@ public void testCreateDatabaseWithDefaultLeader() throws Exception { final String databaseId = idGenerator.generateDatabaseId(); // Finds possible default leader + final String instanceConfigId = instanceAdminClient.getInstance( InstanceName.of(projectId, multiRegionalInstanceId)).getConfig(); final InstanceConfig config = instanceAdminClient.getInstanceConfig(instanceConfigId); diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java index 2495663148..89926b0f3b 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java @@ -1,9 +1,12 @@ package com.example.spanner.v2; import com.example.spanner.SampleIdGenerator; +import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.SpannerOptions; import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; +import com.google.cloud.spanner.admin.database.v1.DatabaseAdminSettings; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; import java.io.IOException; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -31,17 +34,22 @@ public class SampleTestBaseV2 { @BeforeClass public static void beforeClass() throws IOException { - final String serverUrl = ""; + final String serverUrl = "staging-wrenchworks.sandbox.googleapis.com:443"; final SpannerOptions.Builder optionsBuilder = SpannerOptions .newBuilder() .setAutoThrottleAdministrativeRequests(); + final SpannerOptions options = optionsBuilder.build(); + final DatabaseAdminSettings.Builder databaseAdminSettingsBuilder = DatabaseAdminSettings.newBuilder(); + final InstanceAdminSettings.Builder instanceAdminSettingBuilder = InstanceAdminSettings.newBuilder(); + if (!serverUrl.isEmpty()) { - optionsBuilder.setHost(serverUrl); + databaseAdminSettingsBuilder.setEndpoint(serverUrl); + instanceAdminSettingBuilder.setEndpoint(serverUrl); } - final SpannerOptions options = optionsBuilder.build(); + projectId = options.getProjectId(); - databaseAdminClient = DatabaseAdminClient.create(); - instanceAdminClient = InstanceAdminClient.create(); + databaseAdminClient = DatabaseAdminClient.create(databaseAdminSettingsBuilder.build()); + instanceAdminClient = InstanceAdminClient.create(instanceAdminSettingBuilder.build()); idGenerator = new SampleIdGenerator(BASE_DATABASE_ID, BASE_BACKUP_ID, BASE_INSTANCE_CONFIG_ID); } From 01a2369ee8c5fc59598063b46cb49a6f1b9dee72 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 14:32:57 +0530 Subject: [PATCH 06/16] chore: modified test for CreateDatabaseWithDefaultLeaderSample. --- samples/install-without-bom/pom.xml | 6 ++--- samples/snapshot/pom.xml | 6 ++--- samples/snippets/pom.xml | 6 ++--- ...CreateDatabaseWithDefaultLeaderSample.java | 22 +++++++++---------- ...eateDatabaseWithDefaultLeaderSampleIT.java | 3 +-- .../example/spanner/v2/SampleTestBaseV2.java | 15 ++++++++----- 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index fd0c7e3c0a..6a0428234f 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -142,9 +142,9 @@ 3.1.2 - spanner-testing-east1 - spanner-mr-testing - nam6 + java-client-integration-test + java-client-mr-integration-test + nam15 us-east1 cmek-test-key-ring cmek-test-key diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 971ec753ed..c414c01388 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -141,9 +141,9 @@ 3.1.2 - spanner-testing-east1 - spanner-mr-testing - nam6 + java-client-integration-test + java-client-mr-integration-test + nam15 us-east1 cmek-test-key-ring cmek-test-key diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 154ce8cca3..25569c4016 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -178,9 +178,9 @@ 3.1.2 - spanner-testing-east1 - spanner-mr-testing - nam6 + java-client-integration-test + java-client-mr-integration-test + nam15 us-east1 cmek-test-key-ring cmek-test-key diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java index 3fbc629987..507c27e191 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java @@ -3,7 +3,6 @@ //[START spanner_create_database_with_default_leader] import com.google.api.gax.longrunning.OperationFuture; -import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; import com.google.common.collect.ImmutableList; @@ -17,23 +16,22 @@ public class CreateDatabaseWithDefaultLeaderSample { static void createDatabaseWithDefaultLeader() throws IOException { // TODO(developer): Replace these variables before running the sample. - final String projectId = "my-project"; - final String instanceId = "my-instance"; - final String databaseId = "my-database"; + final String instanceName = "my-instance-name"; + final String databaseId = "my-database-name"; final String defaultLeader = "my-default-leader"; - createDatabaseWithDefaultLeader(projectId, instanceId, databaseId, defaultLeader); + createDatabaseWithDefaultLeader(instanceName, databaseId, defaultLeader); } - static void createDatabaseWithDefaultLeader( - String projectId, String instanceId, String databaseId, String defaultLeader) throws IOException { + static void createDatabaseWithDefaultLeader(String instanceName, String databaseId, + String defaultLeader) throws IOException { DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create(); try { - OperationFuture op2 = + OperationFuture op1 = databaseAdminClient.createDatabaseAsync( CreateDatabaseRequest.newBuilder() - .setParent(instanceId) - .setCreateStatement("CREATE DATABASE " + databaseId) + .setParent(instanceName) + .setCreateStatement("CREATE DATABASE " + "`" + databaseId + "`") .addAllExtraStatements( ImmutableList.of("CREATE TABLE Singers (" + " SingerId INT64 NOT NULL," @@ -50,12 +48,12 @@ static void createDatabaseWithDefaultLeader( "ALTER DATABASE " + "`" + databaseId + "`" + " SET OPTIONS ( default_leader = '" + defaultLeader + "' )")) .build()); - Database createdDatabase = op2.get(); + Database createdDatabase = op1.get(); System.out.println("Created database [" + createdDatabase.getName() + "]"); System.out.println("\tDefault leader: " + createdDatabase.getDefaultLeader()); } catch (ExecutionException e) { // If the operation failed during execution, expose the cause. - throw (SpannerException) e.getCause(); + throw SpannerExceptionFactory.asSpannerException(e); } catch (InterruptedException e) { // Throw when a thread is waiting, sleeping, or otherwise occupied, // and the thread is interrupted, either before or during the activity. diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java index 5e6abf7d19..b289ffbb61 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java @@ -30,8 +30,7 @@ public void testCreateDatabaseWithDefaultLeader() throws Exception { // Runs sample final String out = SampleRunner.runSample(() -> CreateDatabaseWithDefaultLeaderSample.createDatabaseWithDefaultLeader( - projectId, - multiRegionalInstanceId, + getInstanceName(projectId, multiRegionalInstanceId), databaseId, defaultLeader ) diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java index 89926b0f3b..a94b96ffc3 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java @@ -34,10 +34,9 @@ public class SampleTestBaseV2 { @BeforeClass public static void beforeClass() throws IOException { - final String serverUrl = "staging-wrenchworks.sandbox.googleapis.com:443"; - final SpannerOptions.Builder optionsBuilder = SpannerOptions - .newBuilder() - .setAutoThrottleAdministrativeRequests(); + final String serverUrl = ""; + final SpannerOptions.Builder optionsBuilder = + SpannerOptions.newBuilder().setAutoThrottleAdministrativeRequests(); final SpannerOptions options = optionsBuilder.build(); final DatabaseAdminSettings.Builder databaseAdminSettingsBuilder = DatabaseAdminSettings.newBuilder(); final InstanceAdminSettings.Builder instanceAdminSettingBuilder = InstanceAdminSettings.newBuilder(); @@ -99,15 +98,19 @@ public static void afterClass() { } } - private static String getDatabaseName(final String projectId, + static String getDatabaseName(final String projectId, final String instanceId, final String databaseId) { return String.format( "projects/%s/instances/%s/databases/%s", projectId, instanceId, databaseId); } - private static String getBackupName(final String projectId, + static String getBackupName(final String projectId, final String instanceId, final String backupId) { return String.format( "projects/%s/instances/%s/backups/%s", projectId, instanceId, backupId); } + + public String getInstanceName(final String projectId, final String instanceId) { + return String.format("projects/%s/instances/%s", projectId, instanceId); + } } From 8daf0df447f58a990c747cf41a75c9019de26bce Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 16:29:14 +0530 Subject: [PATCH 07/16] chore: adding sample and integration test for CreateInstanceSample. --- samples/snapshot/pom.xml | 1 + ...CreateDatabaseWithDefaultLeaderSample.java | 5 +--- .../spanner/v2/CreateInstanceSample.java | 11 +++++---- .../example/spanner/SampleIdGenerator.java | 19 ++++++++++++++- .../com/example/spanner/SampleTestBase.java | 21 ++++++++++++++-- .../spanner/v2/CreateInstanceSampleIT.java | 20 ++++++++++++++++ .../example/spanner/v2/SampleTestBaseV2.java | 24 ++++++++++++++++--- 7 files changed, 87 insertions(+), 14 deletions(-) diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index c414c01388..71c7780930 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -148,6 +148,7 @@ cmek-test-key-ring cmek-test-key mysample + mysample-instance quick-db diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java index 507c27e191..6290290cad 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java @@ -1,7 +1,5 @@ package com.example.spanner.v2; -//[START spanner_create_database_with_default_leader] - import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; @@ -60,5 +58,4 @@ static void createDatabaseWithDefaultLeader(String instanceName, String database throw SpannerExceptionFactory.propagateInterrupt(e); } } -} -//[END spanner_create_database_with_default_leader] +} \ No newline at end of file diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java index c8e2ccfee1..38f34e45a7 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java @@ -1,12 +1,13 @@ package com.example.spanner.v2; -//[START spanner_create_instance] import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; import com.google.spanner.admin.instance.v1.CreateInstanceRequest; import com.google.spanner.admin.instance.v1.Instance; +import com.google.spanner.admin.instance.v1.InstanceConfigName; import com.google.spanner.admin.instance.v1.ProjectName; import java.io.IOException; import java.util.concurrent.ExecutionException; @@ -35,7 +36,8 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti Instance.newBuilder() .setDisplayName(displayName) .setNodeCount(nodeCount) - .setConfig(projectId + "/instanceConfigs/regional-us-central1") + .setConfig( + InstanceConfigName.of(projectId, "regional-us-central1").toString()) .build(); OperationFuture operation = instanceAdminClient.createInstanceAsync( @@ -53,9 +55,10 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti System.out.printf( "Error: Creating instance %s failed with error message %s%n", instance.getName(), e.getMessage()); + throw SpannerExceptionFactory.asSpannerException(e); } catch (InterruptedException e) { System.out.println("Error: Waiting for createInstance operation to finish was interrupted"); + throw SpannerExceptionFactory.propagateInterrupt(e); } } -} -//[END spanner_create_instance] +} \ No newline at end of file diff --git a/samples/snippets/src/test/java/com/example/spanner/SampleIdGenerator.java b/samples/snippets/src/test/java/com/example/spanner/SampleIdGenerator.java index 10523d36b3..ed4a70a2e3 100644 --- a/samples/snippets/src/test/java/com/example/spanner/SampleIdGenerator.java +++ b/samples/snippets/src/test/java/com/example/spanner/SampleIdGenerator.java @@ -26,26 +26,39 @@ */ public class SampleIdGenerator { + private static final int INSTANCE_NAME_MAX_LENGTH = 30; private static final int DATABASE_NAME_MAX_LENGTH = 30; private static final int BACKUP_NAME_MAX_LENGTH = 30; private static final int INSTANCE_CONFIG_ID_MAX_LENGTH = 30; + private final List instanceIds; private final List databaseIds; private final List backupIds; private final List instanceConfigIds; private final String baseDatabaseId; private final String baseBackupId; private final String baseInstanceConfigId; + private final String baseInstanceId; public SampleIdGenerator( - String baseDatabaseId, String baseBackupId, String baseInstanceConfigId) { + String baseDatabaseId, String baseBackupId, String baseInstanceConfigId, String baseInstanceId) { this.baseDatabaseId = baseDatabaseId; this.baseBackupId = baseBackupId; this.baseInstanceConfigId = baseInstanceConfigId; + this.baseInstanceId = baseInstanceId; this.databaseIds = new ArrayList<>(); this.backupIds = new ArrayList<>(); this.instanceConfigIds = new ArrayList<>(); + this.instanceIds = new ArrayList<>(); } + public String generateInstanceId() { + final String instanceId = + (baseInstanceId + "-" + UUID.randomUUID().toString().replaceAll("-", "")) + .substring(0, INSTANCE_NAME_MAX_LENGTH); + + instanceIds.add(instanceId); + return instanceId; + } public String generateDatabaseId() { final String databaseId = (baseDatabaseId + "-" + UUID.randomUUID().toString().replaceAll("-", "")) @@ -81,6 +94,10 @@ public List getBackupIds() { return backupIds; } + public List getInstanceIds() { + return instanceIds; + } + public List getInstanceConfigIds() { return instanceConfigIds; } diff --git a/samples/snippets/src/test/java/com/example/spanner/SampleTestBase.java b/samples/snippets/src/test/java/com/example/spanner/SampleTestBase.java index 39424c8d08..ccfe3e6d4d 100644 --- a/samples/snippets/src/test/java/com/example/spanner/SampleTestBase.java +++ b/samples/snippets/src/test/java/com/example/spanner/SampleTestBase.java @@ -25,7 +25,8 @@ /** Base class for sample integration tests. */ public class SampleTestBase { - + private static final String BASE_INSTANCE_ID = + System.getProperty("spanner.sample.instance", "mysample-instance"); private static final String BASE_DATABASE_ID = System.getProperty("spanner.sample.database", "sampledb"); private static final String BASE_BACKUP_ID = "samplebk"; @@ -56,11 +57,27 @@ public static void beforeClass() { spanner = options.getService(); databaseAdminClient = spanner.getDatabaseAdminClient(); instanceAdminClient = spanner.getInstanceAdminClient(); - idGenerator = new SampleIdGenerator(BASE_DATABASE_ID, BASE_BACKUP_ID, BASE_INSTANCE_CONFIG_ID); + idGenerator = new SampleIdGenerator( + BASE_DATABASE_ID, BASE_BACKUP_ID, BASE_INSTANCE_CONFIG_ID, BASE_INSTANCE_ID); } @AfterClass public static void afterClass() { + for (String instanceId : idGenerator.getInstanceIds()) { + System.out.println("Trying to drop " + instanceId); + try { + // If the database is not found, it is ignored (no exception is thrown) + instanceAdminClient.deleteInstance(instanceId); + } catch (Exception e) { + System.out.println( + "Failed to drop instance " + + instanceId + + " due to " + + e.getMessage() + + ", skipping..."); + } + } + for (String databaseId : idGenerator.getDatabaseIds()) { System.out.println("Trying to drop " + databaseId); try { diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java index 3bb422bf7e..51ab34b405 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java @@ -1,9 +1,29 @@ package com.example.spanner.v2; +import static org.junit.Assert.assertTrue; + +import com.example.spanner.SampleRunner; +import com.google.spanner.admin.instance.v1.InstanceConfig; +import com.google.spanner.admin.instance.v1.InstanceName; +import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @RunWith(JUnit4.class) public class CreateInstanceSampleIT extends SampleTestBaseV2 { + @Test + public void testCreateInstance() throws Exception { + final String instanceId = idGenerator.generateInstanceId(); + + // Runs sample + final String out = SampleRunner.runSample(() -> + CreateInstanceSample.createInstance(projectId, instanceId) + ); + + assertTrue( + "Expected created instance " + instanceId + "." + + " Output received was " + out, out.contains("was successfully created") + ); + } } diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java index a94b96ffc3..4d835e6b1e 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java @@ -1,7 +1,6 @@ package com.example.spanner.v2; import com.example.spanner.SampleIdGenerator; -import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.SpannerOptions; import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; import com.google.cloud.spanner.admin.database.v1.DatabaseAdminSettings; @@ -16,6 +15,9 @@ */ public class SampleTestBaseV2 { + private static final String BASE_INSTANCE_ID = + System.getProperty("spanner.sample.instance", "mysample-instance"); + private static final String BASE_DATABASE_ID = System.getProperty("spanner.sample.database", "sampledb"); private static final String BASE_BACKUP_ID = "samplebk"; @@ -49,11 +51,27 @@ public static void beforeClass() throws IOException { projectId = options.getProjectId(); databaseAdminClient = DatabaseAdminClient.create(databaseAdminSettingsBuilder.build()); instanceAdminClient = InstanceAdminClient.create(instanceAdminSettingBuilder.build()); - idGenerator = new SampleIdGenerator(BASE_DATABASE_ID, BASE_BACKUP_ID, BASE_INSTANCE_CONFIG_ID); + idGenerator = new SampleIdGenerator( + BASE_DATABASE_ID, BASE_BACKUP_ID, BASE_INSTANCE_CONFIG_ID, BASE_INSTANCE_ID); } @AfterClass public static void afterClass() { + for (String instanceId : idGenerator.getInstanceIds()) { + System.out.println("Trying to drop " + instanceId); + try { + // If the database is not found, it is ignored (no exception is thrown) + instanceAdminClient.deleteInstance(getInstanceName(projectId, instanceId)); + } catch (Exception e) { + System.out.println( + "Failed to drop instance " + + instanceId + + " due to " + + e.getMessage() + + ", skipping..."); + } + } + for (String databaseId : idGenerator.getDatabaseIds()) { System.out.println("Trying to drop " + databaseId); try { @@ -110,7 +128,7 @@ static String getBackupName(final String projectId, "projects/%s/instances/%s/backups/%s", projectId, instanceId, backupId); } - public String getInstanceName(final String projectId, final String instanceId) { + static String getInstanceName(final String projectId, final String instanceId) { return String.format("projects/%s/instances/%s", projectId, instanceId); } } From 22dbd2f0062d2eea881b218e7f6dfb54c4189081 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 16:41:30 +0530 Subject: [PATCH 08/16] chore: adding license headers. --- .../CreateDatabaseWithDefaultLeaderSample.java | 16 ++++++++++++++++ .../spanner/v2/CreateInstanceSample.java | 16 ++++++++++++++++ ...reateDatabaseWithDefaultLeaderSampleIT.java | 16 ++++++++++++++++ .../spanner/v2/CreateInstanceSampleIT.java | 18 ++++++++++++++++-- .../example/spanner/v2/SampleTestBaseV2.java | 16 ++++++++++++++++ 5 files changed, 80 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java index 6290290cad..5c525a3135 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.example.spanner.v2; import com.google.api.gax.longrunning.OperationFuture; diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java index 38f34e45a7..82ac689328 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.example.spanner.v2; import com.google.api.gax.longrunning.OperationFuture; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java index b289ffbb61..2491af0980 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.example.spanner.v2; import static org.junit.Assert.assertTrue; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java index 51ab34b405..1a37b38df8 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java @@ -1,10 +1,24 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.example.spanner.v2; import static org.junit.Assert.assertTrue; import com.example.spanner.SampleRunner; -import com.google.spanner.admin.instance.v1.InstanceConfig; -import com.google.spanner.admin.instance.v1.InstanceName; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java index 4d835e6b1e..77a2ce990b 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java @@ -1,3 +1,19 @@ +/* + * Copyright 2023 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package com.example.spanner.v2; import com.example.spanner.SampleIdGenerator; From b0ce7ca545ecb4dff8d501752c7a14c772e8d375 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 16:54:21 +0530 Subject: [PATCH 09/16] chore: fix lint errors. --- .../test/java/com/example/spanner/SampleIdGenerator.java | 5 +++-- .../test/java/com/example/spanner/v2/SampleTestBaseV2.java | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/samples/snippets/src/test/java/com/example/spanner/SampleIdGenerator.java b/samples/snippets/src/test/java/com/example/spanner/SampleIdGenerator.java index ed4a70a2e3..3b375b071e 100644 --- a/samples/snippets/src/test/java/com/example/spanner/SampleIdGenerator.java +++ b/samples/snippets/src/test/java/com/example/spanner/SampleIdGenerator.java @@ -39,8 +39,8 @@ public class SampleIdGenerator { private final String baseInstanceConfigId; private final String baseInstanceId; - public SampleIdGenerator( - String baseDatabaseId, String baseBackupId, String baseInstanceConfigId, String baseInstanceId) { + public SampleIdGenerator(String baseDatabaseId, String baseBackupId, + String baseInstanceConfigId, String baseInstanceId) { this.baseDatabaseId = baseDatabaseId; this.baseBackupId = baseBackupId; this.baseInstanceConfigId = baseInstanceConfigId; @@ -59,6 +59,7 @@ public String generateInstanceId() { instanceIds.add(instanceId); return instanceId; } + public String generateDatabaseId() { final String databaseId = (baseDatabaseId + "-" + UUID.randomUUID().toString().replaceAll("-", "")) diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java index 77a2ce990b..d60a0ca633 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java @@ -56,8 +56,10 @@ public static void beforeClass() throws IOException { final SpannerOptions.Builder optionsBuilder = SpannerOptions.newBuilder().setAutoThrottleAdministrativeRequests(); final SpannerOptions options = optionsBuilder.build(); - final DatabaseAdminSettings.Builder databaseAdminSettingsBuilder = DatabaseAdminSettings.newBuilder(); - final InstanceAdminSettings.Builder instanceAdminSettingBuilder = InstanceAdminSettings.newBuilder(); + final DatabaseAdminSettings.Builder databaseAdminSettingsBuilder = + DatabaseAdminSettings.newBuilder(); + final InstanceAdminSettings.Builder instanceAdminSettingBuilder = + InstanceAdminSettings.newBuilder(); if (!serverUrl.isEmpty()) { databaseAdminSettingsBuilder.setEndpoint(serverUrl); From cfada59a92a9011116e87736140dee882b719bdf Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Sat, 23 Dec 2023 22:40:00 +0530 Subject: [PATCH 10/16] chore: rename file and add sample tags. --- .../spanner/v2/CreateDatabaseWithDefaultLeaderSample.java | 5 ++++- ...CreateInstanceSample.java => CreateInstanceExample.java} | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) rename samples/snippets/src/main/java/com/example/spanner/v2/{CreateInstanceSample.java => CreateInstanceExample.java} (97%) diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java index 5c525a3135..becc921cc3 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java @@ -16,6 +16,8 @@ package com.example.spanner.v2; +//[START spanner_create_database_with_default_leader] + import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; @@ -74,4 +76,5 @@ static void createDatabaseWithDefaultLeader(String instanceName, String database throw SpannerExceptionFactory.propagateInterrupt(e); } } -} \ No newline at end of file +} +//[END spanner_create_database_with_default_leader] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java similarity index 97% rename from samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java rename to samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java index 82ac689328..7da3b4cde9 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java @@ -16,6 +16,7 @@ package com.example.spanner.v2; +//[START spanner_create_instance] import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; @@ -28,7 +29,7 @@ import java.io.IOException; import java.util.concurrent.ExecutionException; -class CreateInstanceSample { +class CreateInstanceExample { static void createInstance() throws IOException { // TODO(developer): Replace these variables before running the sample. @@ -77,4 +78,5 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti throw SpannerExceptionFactory.propagateInterrupt(e); } } -} \ No newline at end of file +} +//[END spanner_create_instance] \ No newline at end of file From 48461439ffc92e97d3cf42528d5a0ac73f44b888 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Sat, 23 Dec 2023 23:31:58 +0530 Subject: [PATCH 11/16] chore: address comments. --- .../spanner/v2/CreateDatabaseWithDefaultLeaderSample.java | 2 +- .../java/com/example/spanner/v2/CreateInstanceExample.java | 3 --- .../java/com/example/spanner/v2/CreateInstanceSampleIT.java | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java index becc921cc3..89e9fc7e8e 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java @@ -32,7 +32,7 @@ public class CreateDatabaseWithDefaultLeaderSample { static void createDatabaseWithDefaultLeader() throws IOException { // TODO(developer): Replace these variables before running the sample. - final String instanceName = "my-instance-name"; + final String instanceName = "projects/my-project/instances/my-instance-id"; final String databaseId = "my-database-name"; final String defaultLeader = "my-default-leader"; createDatabaseWithDefaultLeader(instanceName, databaseId, defaultLeader); diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java index 7da3b4cde9..d77ca83adf 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java @@ -18,7 +18,6 @@ //[START spanner_create_instance] import com.google.api.gax.longrunning.OperationFuture; -import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; @@ -72,10 +71,8 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti System.out.printf( "Error: Creating instance %s failed with error message %s%n", instance.getName(), e.getMessage()); - throw SpannerExceptionFactory.asSpannerException(e); } catch (InterruptedException e) { System.out.println("Error: Waiting for createInstance operation to finish was interrupted"); - throw SpannerExceptionFactory.propagateInterrupt(e); } } } diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java index 1a37b38df8..60c53ab80e 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java @@ -32,7 +32,7 @@ public void testCreateInstance() throws Exception { // Runs sample final String out = SampleRunner.runSample(() -> - CreateInstanceSample.createInstance(projectId, instanceId) + CreateInstanceExample.createInstance(projectId, instanceId) ); assertTrue( From 17bf04dbe4f4fdb546c3c22a67913de7328f63a9 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Sat, 23 Dec 2023 23:39:34 +0530 Subject: [PATCH 12/16] Update samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Knut Olav Løite --- .../spanner/v2/CreateDatabaseWithDefaultLeaderSample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java index 89e9fc7e8e..3dcacbfd47 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java @@ -47,7 +47,7 @@ static void createDatabaseWithDefaultLeader(String instanceName, String database databaseAdminClient.createDatabaseAsync( CreateDatabaseRequest.newBuilder() .setParent(instanceName) - .setCreateStatement("CREATE DATABASE " + "`" + databaseId + "`") + .setCreateStatement("CREATE DATABASE `" + databaseId + "`") .addAllExtraStatements( ImmutableList.of("CREATE TABLE Singers (" + " SingerId INT64 NOT NULL," From 6087d7f2b704af3a775e30df21ae069220aea3dd Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Tue, 26 Dec 2023 14:35:02 +0530 Subject: [PATCH 13/16] chore: rename file path. --- .../generated}/CreateDatabaseWithDefaultLeaderSample.java | 5 +++-- .../{v2 => admin/generated}/CreateInstanceExample.java | 2 +- .../generated}/CreateDatabaseWithDefaultLeaderSampleIT.java | 2 +- .../{v2 => admin/generated}/CreateInstanceSampleIT.java | 2 +- .../spanner/{v2 => admin/generated}/SampleTestBaseV2.java | 2 +- 5 files changed, 7 insertions(+), 6 deletions(-) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/CreateDatabaseWithDefaultLeaderSample.java (96%) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/CreateInstanceExample.java (97%) rename samples/snippets/src/test/java/com/example/spanner/{v2 => admin/generated}/CreateDatabaseWithDefaultLeaderSampleIT.java (97%) rename samples/snippets/src/test/java/com/example/spanner/{v2 => admin/generated}/CreateInstanceSampleIT.java (96%) rename samples/snippets/src/test/java/com/example/spanner/{v2 => admin/generated}/SampleTestBaseV2.java (99%) diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java similarity index 96% rename from samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java index 3dcacbfd47..570228ae11 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java @@ -14,11 +14,12 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; //[START spanner_create_database_with_default_leader] import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; import com.google.common.collect.ImmutableList; @@ -69,7 +70,7 @@ static void createDatabaseWithDefaultLeader(String instanceName, String database System.out.println("\tDefault leader: " + createdDatabase.getDefaultLeader()); } catch (ExecutionException e) { // If the operation failed during execution, expose the cause. - throw SpannerExceptionFactory.asSpannerException(e); + throw (SpannerException) e.getCause(); } catch (InterruptedException e) { // Throw when a thread is waiting, sleeping, or otherwise occupied, // and the thread is interrupted, either before or during the activity. diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java similarity index 97% rename from samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java index d77ca83adf..b6cf82f692 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; //[START spanner_create_instance] import com.google.api.gax.longrunning.OperationFuture; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSampleIT.java similarity index 97% rename from samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java rename to samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSampleIT.java index 2491af0980..39d02e1ed5 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSampleIT.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; import static org.junit.Assert.assertTrue; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceSampleIT.java similarity index 96% rename from samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java rename to samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceSampleIT.java index 60c53ab80e..7743b24f13 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceSampleIT.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; import static org.junit.Assert.assertTrue; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/SampleTestBaseV2.java similarity index 99% rename from samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java rename to samples/snippets/src/test/java/com/example/spanner/admin/generated/SampleTestBaseV2.java index d60a0ca633..868c82544f 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/SampleTestBaseV2.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; import com.example.spanner.SampleIdGenerator; import com.google.cloud.spanner.SpannerOptions; From 033a5058fc3c272d732581534053c8dcf6ae9ed5 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Tue, 26 Dec 2023 19:32:44 +0530 Subject: [PATCH 14/16] chore: remove admin settings. --- .../spanner/admin/generated/CreateInstanceExample.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java index b6cf82f692..06f3e91766 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java @@ -38,10 +38,7 @@ static void createInstance() throws IOException { } static void createInstance(String projectId, String instanceId) throws IOException { - InstanceAdminSettings instanceAdminSettings = - InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); - InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(instanceAdminSettings); - + InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); // Set Instance configuration. int nodeCount = 2; From 2bb6e11022c043608dca4a36b06081f0ff992cdf Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Wed, 27 Dec 2023 01:54:11 +0530 Subject: [PATCH 15/16] chore: address comments. --- .../CreateDatabaseWithDefaultLeaderSample.java | 7 ++----- .../admin/generated/CreateInstanceExample.java | 18 ++++++------------ .../admin/generated/SampleTestBaseV2.java | 10 +++++++++- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java index 570228ae11..eedbca8095 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java @@ -18,12 +18,10 @@ //[START spanner_create_database_with_default_leader] -import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient; import com.google.common.collect.ImmutableList; -import com.google.spanner.admin.database.v1.CreateDatabaseMetadata; import com.google.spanner.admin.database.v1.CreateDatabaseRequest; import com.google.spanner.admin.database.v1.Database; import java.io.IOException; @@ -44,7 +42,7 @@ static void createDatabaseWithDefaultLeader(String instanceName, String database DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create(); try { - OperationFuture op1 = + Database createdDatabase = databaseAdminClient.createDatabaseAsync( CreateDatabaseRequest.newBuilder() .setParent(instanceName) @@ -64,8 +62,7 @@ static void createDatabaseWithDefaultLeader(String instanceName, String database + " INTERLEAVE IN PARENT Singers ON DELETE CASCADE", "ALTER DATABASE " + "`" + databaseId + "`" + " SET OPTIONS ( default_leader = '" + defaultLeader + "' )")) - .build()); - Database createdDatabase = op1.get(); + .build()).get(); System.out.println("Created database [" + createdDatabase.getName() + "]"); System.out.println("\tDefault leader: " + createdDatabase.getDefaultLeader()); } catch (ExecutionException e) { diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java index 06f3e91766..88675c414c 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java @@ -17,10 +17,7 @@ package com.example.spanner.admin.generated; //[START spanner_create_instance] -import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; -import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; -import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; import com.google.spanner.admin.instance.v1.CreateInstanceRequest; import com.google.spanner.admin.instance.v1.Instance; import com.google.spanner.admin.instance.v1.InstanceConfigName; @@ -52,17 +49,14 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti .setConfig( InstanceConfigName.of(projectId, "regional-us-central1").toString()) .build(); - OperationFuture operation = - instanceAdminClient.createInstanceAsync( - CreateInstanceRequest.newBuilder() - .setParent(ProjectName.of(projectId).toString()) - .setInstanceId(instanceId) - .setInstance(instance) - .build()); - try { // Wait for the createInstance operation to finish. - Instance createdInstance = operation.get(); + Instance createdInstance = instanceAdminClient.createInstanceAsync( + CreateInstanceRequest.newBuilder() + .setParent(ProjectName.of(projectId).toString()) + .setInstanceId(instanceId) + .setInstance(instance) + .build()).get(); System.out.printf("Instance %s was successfully created%n", createdInstance.getName()); } catch (ExecutionException e) { System.out.printf( diff --git a/samples/snippets/src/test/java/com/example/spanner/admin/generated/SampleTestBaseV2.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/SampleTestBaseV2.java index 868c82544f..30989214fa 100644 --- a/samples/snippets/src/test/java/com/example/spanner/admin/generated/SampleTestBaseV2.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/SampleTestBaseV2.java @@ -23,6 +23,7 @@ import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; import java.io.IOException; +import java.util.concurrent.TimeUnit; import org.junit.AfterClass; import org.junit.BeforeClass; @@ -38,6 +39,7 @@ public class SampleTestBaseV2 { System.getProperty("spanner.sample.database", "sampledb"); private static final String BASE_BACKUP_ID = "samplebk"; private static final String BASE_INSTANCE_CONFIG_ID = "sampleconfig"; + private static final int AWAIT_TERMINATION_SECONDS = 10; protected static String projectId; protected static final String instanceId = System.getProperty("spanner.test.instance"); @@ -74,7 +76,7 @@ public static void beforeClass() throws IOException { } @AfterClass - public static void afterClass() { + public static void afterClass() throws InterruptedException { for (String instanceId : idGenerator.getInstanceIds()) { System.out.println("Trying to drop " + instanceId); try { @@ -132,6 +134,12 @@ public static void afterClass() { + ", skipping..."); } } + + databaseAdminClient.close(); + instanceAdminClient.close(); + + databaseAdminClient.awaitTermination(AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS); + instanceAdminClient.awaitTermination(AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS); } static String getDatabaseName(final String projectId, From a20463eb068e382ec3276f351ac2284c89823c7e Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Mon, 1 Jan 2024 19:38:23 +0000 Subject: [PATCH 16/16] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20?= =?UTF-8?q?post-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3b2c43bd44..417e48553d 100644 --- a/README.md +++ b/README.md @@ -330,6 +330,8 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-spanner/tree/ | Update Jsonb Data Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/UpdateJsonbDataSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/UpdateJsonbDataSample.java) | | Update Numeric Data Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/UpdateNumericDataSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/UpdateNumericDataSample.java) | | Update Using Dml Returning Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/UpdateUsingDmlReturningSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/UpdateUsingDmlReturningSample.java) | +| Create Database With Default Leader Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java) | +| Create Instance Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java) | [![Open in Cloud Shell][shell_img]](https://console.cloud.google.com/cloudshell/open?git_repo=https://github.com/googleapis/java-spanner&page=editor&open_in_editor=samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java) |