From edc5bbf0d9d4faf48fd9a8d479d5bc5de938c82d Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Mon, 6 Feb 2023 13:29:38 +0530 Subject: [PATCH 01/25] 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 aeb0256285b..227611a10de 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/25] 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 227611a10de..efbffcfa899 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 82a16e9a39d0d9201af20e988ea40c08334de44f Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 30 Nov 2023 00:18:59 +0530 Subject: [PATCH 03/25] 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 00000000000..2ae2e2d4ce6 --- /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 00000000000..a0824225672 --- /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 c18762128b3135b48699a08d5674f2b834b824d4 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Mon, 18 Dec 2023 17:00:51 +0530 Subject: [PATCH 04/25] 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 2ae2e2d4ce6..3fbc6299873 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 a0824225672..c8e2ccfee10 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 00000000000..978ba258fbf --- /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 00000000000..3bb422bf7e9 --- /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 00000000000..24956631487 --- /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 360d5db900ecb51445876958c35168080bd78670 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 13:10:18 +0530 Subject: [PATCH 05/25] 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 978ba258fbf..5e6abf7d191 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 24956631487..89926b0f3b1 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 a12fb43fcd6259101704f981a69735a72c9e680e Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 14:32:57 +0530 Subject: [PATCH 06/25] chore: modified test for CreateDatabaseWithDefaultLeaderSample. --- ...CreateDatabaseWithDefaultLeaderSample.java | 22 +++++++++---------- ...eateDatabaseWithDefaultLeaderSampleIT.java | 3 +-- .../example/spanner/v2/SampleTestBaseV2.java | 15 ++++++++----- 3 files changed, 20 insertions(+), 20 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 3fbc6299873..507c27e1917 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 5e6abf7d191..b289ffbb61a 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 89926b0f3b1..a94b96ffc32 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 f144f426e1cbbed34e4c142a9f93c763e4716897 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 16:29:14 +0530 Subject: [PATCH 07/25] chore: adding sample and integration test for CreateInstanceSample. --- ...CreateDatabaseWithDefaultLeaderSample.java | 5 +--- .../spanner/v2/CreateInstanceSample.java | 11 +++++---- .../example/spanner/SampleIdGenerator.java | 4 ++-- .../spanner/v2/CreateInstanceSampleIT.java | 20 ++++++++++++++++ .../example/spanner/v2/SampleTestBaseV2.java | 24 ++++++++++++++++--- 5 files changed, 51 insertions(+), 13 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 507c27e1917..6290290cadf 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 c8e2ccfee10..38f34e45a7a 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 3b375b071e1..98c19d99039 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; 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 3bb422bf7e9..51ab34b405e 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 a94b96ffc32..4d835e6b1ed 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 091414c51e186746f86b7d911e29101bfdf43e63 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 16:41:30 +0530 Subject: [PATCH 08/25] 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 6290290cadf..5c525a31355 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 38f34e45a7a..82ac6893281 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 b289ffbb61a..2491af09807 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 51ab34b405e..1a37b38df84 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 4d835e6b1ed..77a2ce990be 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 988fd7ad3a478a66f9496961f2b577197dbc529e Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 21 Dec 2023 16:54:21 +0530 Subject: [PATCH 09/25] chore: fix lint errors. --- .../test/java/com/example/spanner/SampleIdGenerator.java | 4 ++-- .../test/java/com/example/spanner/v2/SampleTestBaseV2.java | 6 ++++-- 2 files changed, 6 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 98c19d99039..3b375b071e1 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; 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 77a2ce990be..d60a0ca633e 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 922f47bbf3b4553e40798e3e41bbae32dc65ebaa Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Sat, 23 Dec 2023 22:40:00 +0530 Subject: [PATCH 10/25] 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 5c525a31355..becc921cc33 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 82ac6893281..7da3b4cde94 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 0bf6f87b20cb6855e59375282fd4c7345ce0e211 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Sat, 23 Dec 2023 23:31:58 +0530 Subject: [PATCH 11/25] 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 becc921cc33..89e9fc7e8ed 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 7da3b4cde94..d77ca83adf5 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 1a37b38df84..60c53ab80eb 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 396419d70b7517f5d7f9cae0a1c83f3abcea6895 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Sat, 23 Dec 2023 23:39:34 +0530 Subject: [PATCH 12/25] 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 89e9fc7e8ed..3dcacbfd474 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 eb997ae6ad6bc9021268c3bde1f413be6f57dcb1 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Mon, 25 Dec 2023 12:08:39 +0530 Subject: [PATCH 13/25] chore: rewrite CreateInstanceConfigSample. --- .../v2/CreateInstanceConfigSample.java | 71 +++++++++++++++++ ...ateInstanceWithProcessingUnitsExample.java | 76 +++++++++++++++++++ .../v2/DeleteInstanceConfigSample.java | 49 ++++++++++++ .../spanner/v2/GetInstanceConfigSample.java | 54 +++++++++++++ .../ListInstanceConfigOperationsSample.java | 66 ++++++++++++++++ .../spanner/v2/ListInstanceConfigsSample.java | 52 +++++++++++++ .../v2/UpdateInstanceConfigSample.java | 73 ++++++++++++++++++ 7 files changed, 441 insertions(+) create mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java create mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java create mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java create mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java create mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java create mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java create mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java new file mode 100644 index 00000000000..3393ecf59bd --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java @@ -0,0 +1,71 @@ +/* + * Copyright 2022 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; + +// [START spanner_create_instance_config] +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.common.collect.ImmutableList; +import com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata; +import com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest; +import com.google.spanner.admin.instance.v1.InstanceConfig; +import com.google.spanner.admin.instance.v1.ReplicaInfo; +import java.io.IOException; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +class CreateInstanceConfigSample { + static void createInstanceConfig() throws IOException { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project"; + String baseInstanceConfig = "my-base-instance-config"; + String instanceConfigId = "custom-instance-config4"; + createInstanceConfig(projectId, baseInstanceConfig, instanceConfigId); + } + + static void createInstanceConfig( + String projectId, String baseInstanceConfig, String instanceConfigName) throws IOException { + InstanceAdminSettings instanceAdminSettings = + InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); + InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(instanceAdminSettings); + final InstanceConfig baseConfig = instanceAdminClient.getInstanceConfig(baseInstanceConfig); + final List readOnlyReplicas = ImmutableList.of(baseConfig.getOptionalReplicas(0)); + final InstanceConfig instanceConfig = + InstanceConfig.newBuilder().setName(instanceConfigName).setBaseConfig(baseInstanceConfig) + .setDisplayName(instanceConfigName).addAllReplicas(readOnlyReplicas).build(); + final CreateInstanceConfigRequest createInstanceConfigRequest = + CreateInstanceConfigRequest.newBuilder().setInstanceConfig(instanceConfig).build(); + final OperationFuture operation = + instanceAdminClient.createInstanceConfigAsync(createInstanceConfigRequest); + try { + System.out.printf("Waiting for create operation for %s to complete...\n", instanceConfigName); + InstanceConfig instanceConfigResult = operation.get(5, TimeUnit.MINUTES); + System.out.printf("Created instance configuration %s\n", instanceConfigResult.getName()); + } catch (ExecutionException | TimeoutException e) { + System.out.printf( + "Error: Creating instance configuration %s failed with error message %s\n", + instanceConfig.getName(), e.getMessage()); + } catch (InterruptedException e) { + System.out.println( + "Error: Waiting for createInstanceConfig operation to finish was interrupted"); + } + } +} +// [END spanner_create_instance_config] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java new file mode 100644 index 00000000000..5602e1019d2 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java @@ -0,0 +1,76 @@ +/* + * Copyright 2021 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; + +//[START spanner_create_instance_with_processing_units] + +import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.Instance; +import com.google.cloud.spanner.InstanceAdminClient; +import com.google.cloud.spanner.InstanceConfigId; +import com.google.cloud.spanner.InstanceId; +import com.google.cloud.spanner.InstanceInfo; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; + +class CreateInstanceWithProcessingUnitsExample { + + static void createInstance() { + // 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) { + Spanner spanner = SpannerOptions.newBuilder().setProjectId(projectId).build().getService(); + InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); + + // Set Instance configuration. + String configId = "regional-us-central1"; + // This will create an instance with the processing power of 0.2 nodes. + int processingUnits = 500; + String displayName = "Descriptive name"; + + try { + // Creates a new instance + System.out.printf("Creating instance %s.%n", instanceId); + OperationFuture operation = + instanceAdminClient.createInstance(InstanceInfo + .newBuilder(InstanceId.of(projectId, instanceId)) + .setInstanceConfigId(InstanceConfigId.of(projectId, configId)) + .setProcessingUnits(processingUnits) + .setDisplayName(displayName) + .build()); + + // Wait for the createInstance operation to finish. + System.out.printf("Waiting for operation on %s to complete...%n", instanceId); + Instance createdInstance = operation.get(); + + System.out.printf("Created instance %s.%n", createdInstance.getId().getInstance()); + + Instance instance = instanceAdminClient.getInstance(instanceId); + System.out.printf("Instance %s has %d processing units.%n", instance.getId().getInstance(), + instance.getProcessingUnits()); + } catch (Exception e) { + System.out.printf("Error: %s.%n", e.getMessage()); + } + spanner.close(); + } +} +//[END spanner_create_instance_with_processing_units] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java new file mode 100644 index 00000000000..6f27bb1289d --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java @@ -0,0 +1,49 @@ +/* + * Copyright 2022 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; + +// [START spanner_delete_instance_config] +import com.google.cloud.spanner.InstanceAdminClient; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerException; +import com.google.cloud.spanner.SpannerOptions; + +class DeleteInstanceConfigSample { + static void deleteInstanceConfig() { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project"; + String instanceConfigId = "custom-user-config"; + deleteInstanceConfig(projectId, instanceConfigId); + } + + static void deleteInstanceConfig(String projectId, String instanceConfigId) { + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); + try { + System.out.printf("Deleting %s...\n", instanceConfigId); + instanceAdminClient.deleteInstanceConfig(instanceConfigId); + System.out.printf("Deleted instance configuration %s\n", instanceConfigId); + } catch (SpannerException e) { + System.out.printf( + "Error: Deleting instance configuration %s failed with error message: %s\n", + instanceConfigId, e.getMessage()); + } + } + } +} +// [END spanner_delete_instance_config] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java new file mode 100644 index 00000000000..7df180f56ab --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java @@ -0,0 +1,54 @@ +/* + * Copyright 2021 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; + +//[START spanner_get_instance_config] + +import com.google.cloud.spanner.InstanceAdminClient; +import com.google.cloud.spanner.InstanceConfig; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; + +public class GetInstanceConfigSample { + + static void getInstanceConfig() { + // TODO(developer): Replace these variables before running the sample. + final String projectId = "my-project"; + final String instanceConfigName = "nam6"; + getInstanceConfig(projectId, instanceConfigName); + } + + static void getInstanceConfig(String projectId, String instanceConfigName) { + try (Spanner spanner = SpannerOptions + .newBuilder() + .setProjectId(projectId) + .build() + .getService()) { + final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); + + final InstanceConfig instanceConfig = instanceAdminClient + .getInstanceConfig(instanceConfigName); + + System.out.printf( + "Available leader options for instance config %s: %s%n", + instanceConfig.getId(), + instanceConfig.getLeaderOptions() + ); + } + } +} +//[END spanner_get_instance_config] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java new file mode 100644 index 00000000000..8f29961b5ed --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java @@ -0,0 +1,66 @@ +/* + * Copyright 2022 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; + +// [START spanner_list_instance_config_operations] +import com.google.cloud.spanner.InstanceAdminClient; +import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.longrunning.Operation; +import com.google.protobuf.InvalidProtocolBufferException; +import com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata; + +public class ListInstanceConfigOperationsSample { + static void listInstanceConfigOperations() { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project"; + listInstanceConfigOperations(projectId); + } + + static void listInstanceConfigOperations(String projectId) { + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); + + try { + System.out.printf( + "Getting list of instance config operations for project %s...\n", + projectId); + final Iterable instanceConfigOperations = + instanceAdminClient + .listInstanceConfigOperations( + Options.filter( + "(metadata.@type=type.googleapis.com/" + + "google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)")) + .iterateAll(); + for (Operation operation : instanceConfigOperations) { + CreateInstanceConfigMetadata metadata = + operation.getMetadata().unpack(CreateInstanceConfigMetadata.class); + System.out.printf( + "Create instance config operation for %s is %d%% completed.\n", + metadata.getInstanceConfig().getName(), metadata.getProgress().getProgressPercent()); + } + } catch (InvalidProtocolBufferException e) { + System.out.printf( + "Error: Listing instance config operations failed with error message %s\n", + e.getMessage()); + } + } + } +} +// [END spanner_list_instance_config_operations] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java new file mode 100644 index 00000000000..96c3c83620b --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java @@ -0,0 +1,52 @@ +/* + * Copyright 2021 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; + +//[START spanner_list_instance_configs] + +import com.google.cloud.spanner.InstanceAdminClient; +import com.google.cloud.spanner.InstanceConfig; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; + +public class ListInstanceConfigsSample { + + static void listInstanceConfigs() { + // TODO(developer): Replace these variables before running the sample. + final String projectId = "my-project"; + listInstanceConfigs(projectId); + } + + static void listInstanceConfigs(String projectId) { + try (Spanner spanner = SpannerOptions + .newBuilder() + .setProjectId(projectId) + .build() + .getService()) { + final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); + + for (InstanceConfig instanceConfig : instanceAdminClient.listInstanceConfigs().iterateAll()) { + System.out.printf( + "Available leader options for instance config %s: %s%n", + instanceConfig.getId(), + instanceConfig.getLeaderOptions() + ); + } + } + } +} +//[END spanner_list_instance_configs] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java new file mode 100644 index 00000000000..094cf206e81 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java @@ -0,0 +1,73 @@ +/* + * Copyright 2022 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; + +// [START spanner_update_instance_config] +import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.InstanceAdminClient; +import com.google.cloud.spanner.InstanceConfig; +import com.google.cloud.spanner.InstanceConfigId; +import com.google.cloud.spanner.InstanceConfigInfo; +import com.google.cloud.spanner.InstanceConfigInfo.InstanceConfigField; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.common.collect.ImmutableList; +import com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; + +class UpdateInstanceConfigSample { + static void updateInstanceConfig() { + // TODO(developer): Replace these variables before running the sample. + String projectId = "my-project"; + String instanceConfigId = "custom-instance-config"; + updateInstanceConfig(projectId, instanceConfigId); + } + + static void updateInstanceConfig(String projectId, String instanceConfigId) { + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); + InstanceConfigInfo instanceConfigInfo = + InstanceConfig.newBuilder(InstanceConfigId.of(projectId, instanceConfigId)) + .setDisplayName("updated custom instance config") + .addLabel("updated", "true") + .build(); + final OperationFuture operation = + instanceAdminClient.updateInstanceConfig( + instanceConfigInfo, + ImmutableList.of(InstanceConfigField.DISPLAY_NAME, InstanceConfigField.LABELS)); + try { + System.out.printf("Waiting for update operation on %s to complete...\n", instanceConfigId); + InstanceConfig instanceConfig = operation.get(5, TimeUnit.MINUTES); + System.out.printf( + "Updated instance configuration %s with new display name %s\n", + instanceConfig.getId(), instanceConfig.getDisplayName()); + } catch (ExecutionException | TimeoutException e) { + System.out.printf( + "Error: Updating instance config %s failed with error message %s\n", + instanceConfigInfo.getId(), e.getMessage()); + e.printStackTrace(); + } catch (InterruptedException e) { + System.out.println( + "Error: Waiting for updateInstanceConfig operation to finish was interrupted"); + } + } + } +} +// [END spanner_update_instance_config] From b54bb0f62c873f4c31cfad78a3568fccf8385218 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Tue, 26 Dec 2023 00:58:05 +0530 Subject: [PATCH 14/25] chore: rewrite instance API samples. --- ...ateInstanceWithProcessingUnitsExample.java | 51 +++++++------ .../v2/DeleteInstanceConfigSample.java | 39 +++++----- .../spanner/v2/GetInstanceConfigSample.java | 39 +++++----- .../ListInstanceConfigOperationsSample.java | 58 +++++++------- .../spanner/v2/ListInstanceConfigsSample.java | 33 ++++---- .../v2/UpdateInstanceConfigSample.java | 75 +++++++++---------- 6 files changed, 145 insertions(+), 150 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java index 5602e1019d2..193f0924fbe 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java @@ -19,27 +19,28 @@ //[START spanner_create_instance_with_processing_units] import com.google.api.gax.longrunning.OperationFuture; -import com.google.cloud.spanner.Instance; -import com.google.cloud.spanner.InstanceAdminClient; -import com.google.cloud.spanner.InstanceConfigId; -import com.google.cloud.spanner.InstanceId; -import com.google.cloud.spanner.InstanceInfo; -import com.google.cloud.spanner.Spanner; -import com.google.cloud.spanner.SpannerOptions; +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; class CreateInstanceWithProcessingUnitsExample { - static void createInstance() { + 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) { - Spanner spanner = SpannerOptions.newBuilder().setProjectId(projectId).build().getService(); - InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); + static void createInstance(String projectId, String instanceId) throws IOException { + InstanceAdminSettings instanceAdminSettings = + InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); + InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(instanceAdminSettings); // Set Instance configuration. String configId = "regional-us-central1"; @@ -50,27 +51,33 @@ static void createInstance(String projectId, String instanceId) { try { // Creates a new instance System.out.printf("Creating instance %s.%n", instanceId); - OperationFuture operation = - instanceAdminClient.createInstance(InstanceInfo - .newBuilder(InstanceId.of(projectId, instanceId)) - .setInstanceConfigId(InstanceConfigId.of(projectId, configId)) - .setProcessingUnits(processingUnits) + Instance instance = + Instance.newBuilder() .setDisplayName(displayName) - .build()); + .setProcessingUnits(processingUnits) + .setConfig( + InstanceConfigName.of(projectId, configId).toString()) + .build(); + OperationFuture operation = + instanceAdminClient.createInstanceAsync( + CreateInstanceRequest.newBuilder() + .setParent(ProjectName.of(projectId).toString()) + .setInstanceId(instanceId) + .setInstance(instance) + .build()); // Wait for the createInstance operation to finish. System.out.printf("Waiting for operation on %s to complete...%n", instanceId); Instance createdInstance = operation.get(); - System.out.printf("Created instance %s.%n", createdInstance.getId().getInstance()); + System.out.printf("Created instance %s.%n", createdInstance.getName()); - Instance instance = instanceAdminClient.getInstance(instanceId); - System.out.printf("Instance %s has %d processing units.%n", instance.getId().getInstance(), - instance.getProcessingUnits()); + Instance instanceResult = instanceAdminClient.getInstance(instanceId); + System.out.printf("Instance %s has %d processing units.%n", instanceResult.getName(), + instanceResult.getProcessingUnits()); } catch (Exception e) { System.out.printf("Error: %s.%n", e.getMessage()); } - spanner.close(); } } //[END spanner_create_instance_with_processing_units] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java index 6f27bb1289d..b13f307d436 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java @@ -17,32 +17,35 @@ package com.example.spanner.v2; // [START spanner_delete_instance_config] -import com.google.cloud.spanner.InstanceAdminClient; -import com.google.cloud.spanner.Spanner; import com.google.cloud.spanner.SpannerException; -import com.google.cloud.spanner.SpannerOptions; +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.DeleteInstanceConfigRequest; +import java.io.IOException; class DeleteInstanceConfigSample { - static void deleteInstanceConfig() { + static void deleteInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. String projectId = "my-project"; - String instanceConfigId = "custom-user-config"; + String instanceConfigId = "projects/my-project/instanceConfigs/custom-user-config"; deleteInstanceConfig(projectId, instanceConfigId); } - static void deleteInstanceConfig(String projectId, String instanceConfigId) { - try (Spanner spanner = - SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { - final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); - try { - System.out.printf("Deleting %s...\n", instanceConfigId); - instanceAdminClient.deleteInstanceConfig(instanceConfigId); - System.out.printf("Deleted instance configuration %s\n", instanceConfigId); - } catch (SpannerException e) { - System.out.printf( - "Error: Deleting instance configuration %s failed with error message: %s\n", - instanceConfigId, e.getMessage()); - } + static void deleteInstanceConfig(String projectId, String instanceConfigId) throws IOException { + final InstanceAdminSettings instanceAdminSettings = + InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); + final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(instanceAdminSettings); + final DeleteInstanceConfigRequest request = + DeleteInstanceConfigRequest.newBuilder().setName(instanceConfigId).build(); + + try { + System.out.printf("Deleting %s...\n", instanceConfigId); + instanceAdminClient.deleteInstanceConfig(request); + System.out.printf("Deleted instance configuration %s\n", instanceConfigId); + } catch (SpannerException e) { + System.out.printf( + "Error: Deleting instance configuration %s failed with error message: %s\n", + instanceConfigId, e.getMessage()); } } } diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java index 7df180f56ab..06e2b0f719e 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java @@ -18,37 +18,32 @@ //[START spanner_get_instance_config] -import com.google.cloud.spanner.InstanceAdminClient; -import com.google.cloud.spanner.InstanceConfig; -import com.google.cloud.spanner.Spanner; -import com.google.cloud.spanner.SpannerOptions; +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.InstanceConfig; +import java.io.IOException; public class GetInstanceConfigSample { - static void getInstanceConfig() { + static void getInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. final String projectId = "my-project"; final String instanceConfigName = "nam6"; getInstanceConfig(projectId, instanceConfigName); } - static void getInstanceConfig(String projectId, String instanceConfigName) { - try (Spanner spanner = SpannerOptions - .newBuilder() - .setProjectId(projectId) - .build() - .getService()) { - final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); - - final InstanceConfig instanceConfig = instanceAdminClient - .getInstanceConfig(instanceConfigName); - - System.out.printf( - "Available leader options for instance config %s: %s%n", - instanceConfig.getId(), - instanceConfig.getLeaderOptions() - ); - } + static void getInstanceConfig(String projectId, String instanceConfigName) throws IOException { + final InstanceAdminSettings instanceAdminSettings = + InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); + final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(instanceAdminSettings); + + final InstanceConfig instanceConfig = instanceAdminClient.getInstanceConfig(instanceConfigName); + + System.out.printf( + "Available leader options for instance config %s: %s%n", + instanceConfig.getName(), + instanceConfig.getLeaderOptionsList() + ); } } //[END spanner_get_instance_config] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java index 8f29961b5ed..2af4ca135d5 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java @@ -17,49 +17,47 @@ package com.example.spanner.v2; // [START spanner_list_instance_config_operations] -import com.google.cloud.spanner.InstanceAdminClient; -import com.google.cloud.spanner.Options; -import com.google.cloud.spanner.Spanner; -import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; import com.google.longrunning.Operation; import com.google.protobuf.InvalidProtocolBufferException; import com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata; +import com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest; +import java.io.IOException; public class ListInstanceConfigOperationsSample { - static void listInstanceConfigOperations() { + static void listInstanceConfigOperations() throws IOException { // TODO(developer): Replace these variables before running the sample. String projectId = "my-project"; listInstanceConfigOperations(projectId); } - static void listInstanceConfigOperations(String projectId) { - try (Spanner spanner = - SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { - final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); + static void listInstanceConfigOperations(String projectId) throws IOException { + final InstanceAdminSettings instanceAdminSettings = + InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); + final InstanceAdminClient instanceAdminClient = + InstanceAdminClient.create(instanceAdminSettings); - try { + try { + System.out.printf( + "Getting list of instance config operations for project %s...\n", + projectId); + final ListInstanceConfigOperationsRequest request = + ListInstanceConfigOperationsRequest.newBuilder().setFilter("(metadata.@type=type.googleapis.com/" + + "google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)").build(); + final Iterable instanceConfigOperations = + instanceAdminClient.listInstanceConfigOperations(request).iterateAll(); + for (Operation operation : instanceConfigOperations) { + CreateInstanceConfigMetadata metadata = + operation.getMetadata().unpack(CreateInstanceConfigMetadata.class); System.out.printf( - "Getting list of instance config operations for project %s...\n", - projectId); - final Iterable instanceConfigOperations = - instanceAdminClient - .listInstanceConfigOperations( - Options.filter( - "(metadata.@type=type.googleapis.com/" - + "google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)")) - .iterateAll(); - for (Operation operation : instanceConfigOperations) { - CreateInstanceConfigMetadata metadata = - operation.getMetadata().unpack(CreateInstanceConfigMetadata.class); - System.out.printf( - "Create instance config operation for %s is %d%% completed.\n", - metadata.getInstanceConfig().getName(), metadata.getProgress().getProgressPercent()); - } - } catch (InvalidProtocolBufferException e) { - System.out.printf( - "Error: Listing instance config operations failed with error message %s\n", - e.getMessage()); + "Create instance config operation for %s is %d%% completed.\n", + metadata.getInstanceConfig().getName(), metadata.getProgress().getProgressPercent()); } + } catch (InvalidProtocolBufferException e) { + System.out.printf( + "Error: Listing instance config operations failed with error message %s\n", + e.getMessage()); } } } diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java index 96c3c83620b..a53bbc16691 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java @@ -18,34 +18,27 @@ //[START spanner_list_instance_configs] -import com.google.cloud.spanner.InstanceAdminClient; -import com.google.cloud.spanner.InstanceConfig; -import com.google.cloud.spanner.Spanner; -import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; +import com.google.spanner.admin.instance.v1.InstanceConfig; +import java.io.IOException; public class ListInstanceConfigsSample { - static void listInstanceConfigs() { + static void listInstanceConfigs() throws IOException { // TODO(developer): Replace these variables before running the sample. final String projectId = "my-project"; listInstanceConfigs(projectId); } - static void listInstanceConfigs(String projectId) { - try (Spanner spanner = SpannerOptions - .newBuilder() - .setProjectId(projectId) - .build() - .getService()) { - final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); - - for (InstanceConfig instanceConfig : instanceAdminClient.listInstanceConfigs().iterateAll()) { - System.out.printf( - "Available leader options for instance config %s: %s%n", - instanceConfig.getId(), - instanceConfig.getLeaderOptions() - ); - } + static void listInstanceConfigs(String projectId) throws IOException { + final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); + for (InstanceConfig instanceConfig : + instanceAdminClient.listInstanceConfigs(projectId).iterateAll()) { + System.out.printf( + "Available leader options for instance config %s: %s%n", + instanceConfig.getName(), + instanceConfig.getLeaderOptionsList() + ); } } } diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java index 094cf206e81..f327e341e51 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java @@ -18,55 +18,54 @@ // [START spanner_update_instance_config] import com.google.api.gax.longrunning.OperationFuture; -import com.google.cloud.spanner.InstanceAdminClient; -import com.google.cloud.spanner.InstanceConfig; -import com.google.cloud.spanner.InstanceConfigId; -import com.google.cloud.spanner.InstanceConfigInfo; -import com.google.cloud.spanner.InstanceConfigInfo.InstanceConfigField; -import com.google.cloud.spanner.Spanner; -import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; import com.google.common.collect.ImmutableList; +import com.google.protobuf.FieldMask; +import com.google.spanner.admin.instance.v1.InstanceConfig; import com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata; +import com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest; +import java.io.IOException; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; class UpdateInstanceConfigSample { - static void updateInstanceConfig() { + static void updateInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. String projectId = "my-project"; - String instanceConfigId = "custom-instance-config"; - updateInstanceConfig(projectId, instanceConfigId); + String instanceConfigName = "projects/my-project/instanceConfigs/custom-instance-config"; + updateInstanceConfig(projectId, instanceConfigName); } - static void updateInstanceConfig(String projectId, String instanceConfigId) { - try (Spanner spanner = - SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { - final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); - InstanceConfigInfo instanceConfigInfo = - InstanceConfig.newBuilder(InstanceConfigId.of(projectId, instanceConfigId)) - .setDisplayName("updated custom instance config") - .addLabel("updated", "true") - .build(); - final OperationFuture operation = - instanceAdminClient.updateInstanceConfig( - instanceConfigInfo, - ImmutableList.of(InstanceConfigField.DISPLAY_NAME, InstanceConfigField.LABELS)); - try { - System.out.printf("Waiting for update operation on %s to complete...\n", instanceConfigId); - InstanceConfig instanceConfig = operation.get(5, TimeUnit.MINUTES); - System.out.printf( - "Updated instance configuration %s with new display name %s\n", - instanceConfig.getId(), instanceConfig.getDisplayName()); - } catch (ExecutionException | TimeoutException e) { - System.out.printf( - "Error: Updating instance config %s failed with error message %s\n", - instanceConfigInfo.getId(), e.getMessage()); - e.printStackTrace(); - } catch (InterruptedException e) { - System.out.println( - "Error: Waiting for updateInstanceConfig operation to finish was interrupted"); - } + static void updateInstanceConfig(String projectId, String instanceConfigName) throws IOException { + final InstanceAdminSettings instanceAdminSettings = + InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); + final com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient instanceAdminClient = + com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient.create(instanceAdminSettings); + final InstanceConfig instanceConfig = + InstanceConfig.newBuilder() + .setName(instanceConfigName) + .setDisplayName("updated custom instance config") + .putLabels("updated", "true").build(); + final UpdateInstanceConfigRequest updateInstanceConfigRequest = + UpdateInstanceConfigRequest.newBuilder().setInstanceConfig(instanceConfig).setUpdateMask( + FieldMask.newBuilder().addAllPaths(ImmutableList.of("display_name", "labels")).build()).build(); + final OperationFuture operation = + instanceAdminClient.updateInstanceConfigAsync(updateInstanceConfigRequest); + try { + System.out.printf("Waiting for update operation on %s to complete...\n", instanceConfigName); + InstanceConfig instanceConfigResult = operation.get(5, TimeUnit.MINUTES); + System.out.printf( + "Updated instance configuration %s with new display name %s\n", + instanceConfigResult.getName(), instanceConfig.getDisplayName()); + } catch (ExecutionException | TimeoutException e) { + System.out.printf( + "Error: Updating instance config %s failed with error message %s\n", + instanceConfig.getName(), e.getMessage()); + e.printStackTrace(); + } catch (InterruptedException e) { + System.out.println( + "Error: Waiting for updateInstanceConfig operation to finish was interrupted"); } } } From fa0aa1ea411dc176150b8a59eb559de0c56bdc28 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Tue, 26 Dec 2023 11:24:17 +0530 Subject: [PATCH 15/25] chore: removed previous files and adding new integration test. --- ...CreateDatabaseWithDefaultLeaderSample.java | 80 ------------------- .../spanner/v2/CreateInstanceExample.java | 79 ------------------ ...eateDatabaseWithDefaultLeaderSampleIT.java | 61 -------------- .../spanner/v2/CreateInstanceSampleIT.java | 43 ---------- .../v2/CustomInstanceConfigSampleIT.java | 63 +++++++++++++++ 5 files changed, 63 insertions(+), 263 deletions(-) delete mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java delete mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java delete mode 100644 samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java delete 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/CustomInstanceConfigSampleIT.java 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 deleted file mode 100644 index 3dcacbfd474..00000000000 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSample.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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; - -//[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; -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 CreateDatabaseWithDefaultLeaderSample { - - static void createDatabaseWithDefaultLeader() throws IOException { - // TODO(developer): Replace these variables before running the sample. - 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); - } - - static void createDatabaseWithDefaultLeader(String instanceName, String databaseId, - String defaultLeader) throws IOException { - DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create(); - - try { - OperationFuture op1 = - databaseAdminClient.createDatabaseAsync( - CreateDatabaseRequest.newBuilder() - .setParent(instanceName) - .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 = 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 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. - throw SpannerExceptionFactory.propagateInterrupt(e); - } - } -} -//[END spanner_create_database_with_default_leader] 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 deleted file mode 100644 index d77ca83adf5..00000000000 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceExample.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * 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; - -//[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; -import com.google.spanner.admin.instance.v1.ProjectName; -import java.io.IOException; -import java.util.concurrent.ExecutionException; - -class CreateInstanceExample { - - 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( - 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(); - 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] \ No newline at end of file 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 deleted file mode 100644 index 2491af09807..00000000000 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateDatabaseWithDefaultLeaderSampleIT.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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; - -@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( - getInstanceName(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 deleted file mode 100644 index 60c53ab80eb..00000000000 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceSampleIT.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 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(() -> - CreateInstanceExample.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/CustomInstanceConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CustomInstanceConfigSampleIT.java new file mode 100644 index 00000000000..29c2096765b --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CustomInstanceConfigSampleIT.java @@ -0,0 +1,63 @@ +/* + * 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 org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public class CustomInstanceConfigSampleIT extends SampleTestBaseV2 { + + @Test + public void testCustomInstanceConfigOperations() throws Exception { + String customInstanceConfigId = idGenerator.generateInstanceConfigId(); + + // Create a random instance config. Display name is set to the instance config id in sample. + final String out1 = + SampleRunner.runSample( + () -> + CreateInstanceConfigSample.createInstanceConfig( + projectId, instanceConfigName, customInstanceConfigId)); + assertTrue(out1.contains("Created instance configuration")); + + // List the instance config operations. + final String out2 = + SampleRunner.runSample( + () -> + ListInstanceConfigOperationsSample.listInstanceConfigOperations(projectId)); + assertTrue(out2.contains("List instance config operation")); + + // Update display name to a randomly generated instance config id. + final String out3 = + SampleRunner.runSample( + () -> + UpdateInstanceConfigSample.updateInstanceConfig( + projectId, customInstanceConfigId)); + assertTrue(out3.contains("Updated instance configuration")); + + // Delete the created instance config. + final String out4 = + SampleRunner.runSample( + () -> + DeleteInstanceConfigSample.deleteInstanceConfig(projectId, customInstanceConfigId)); + assertTrue(out4.contains("Deleted instance configuration")); + } +} From 78beaacc1ae687f6ce0737a8f7d63f6473378039 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Tue, 26 Dec 2023 16:37:02 +0530 Subject: [PATCH 16/25] chore: changing instance integration tests. --- samples/install-without-bom/pom.xml | 2 +- samples/snapshot/pom.xml | 2 +- samples/snippets/pom.xml | 2 +- .../spanner/CreateInstanceConfigSample.java | 4 +- .../v2/CreateInstanceConfigSample.java | 30 ++++++++++----- .../v2/DeleteInstanceConfigSample.java | 9 ++--- .../spanner/v2/GetInstanceConfigSample.java | 9 ++--- .../ListInstanceConfigOperationsSample.java | 19 +++++----- .../spanner/v2/ListInstanceConfigsSample.java | 8 ++-- .../v2/UpdateInstanceConfigSample.java | 9 ++--- .../v2/CustomInstanceConfigSampleIT.java | 37 +++++++++++++------ .../example/spanner/v2/SampleTestBaseV2.java | 10 ++++- 12 files changed, 82 insertions(+), 59 deletions(-) diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index b474d5fec68..14042225c97 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -144,7 +144,7 @@ java-client-integration-test java-client-mr-integration-test - nam15 + nam11 us-east1 cmek-test-key-ring cmek-test-key diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index 62bd84491ed..d8109cd6b7a 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -143,7 +143,7 @@ java-client-integration-test java-client-mr-integration-test - nam15 + nam11 us-east1 cmek-test-key-ring cmek-test-key diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 25569c40169..cd86c4a6925 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -180,7 +180,7 @@ java-client-integration-test java-client-mr-integration-test - nam15 + nam11 us-east1 cmek-test-key-ring cmek-test-key diff --git a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java index 379e0e26172..3a2741253e2 100644 --- a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java @@ -47,9 +47,9 @@ static void createInstanceConfig( SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); final InstanceConfig baseConfig = instanceAdminClient.getInstanceConfig(baseInstanceConfig); - List readOnlyReplicas = + final List readOnlyReplicas = ImmutableList.of(baseConfig.getOptionalReplicas().get(0)); - InstanceConfigInfo instanceConfigInfo = + final InstanceConfigInfo instanceConfigInfo = InstanceConfig.newBuilder(InstanceConfigId.of(projectId, instanceConfigId), baseConfig) .setDisplayName(instanceConfigId) .addReadOnlyReplicas(readOnlyReplicas) diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java index 3393ecf59bd..1750be6b082 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java @@ -30,28 +30,38 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; +import java.util.stream.Stream; class CreateInstanceConfigSample { static void createInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. - String projectId = "my-project"; - String baseInstanceConfig = "my-base-instance-config"; + String projectId = "projects/my-project"; + String baseInstanceConfig = "nam11"; String instanceConfigId = "custom-instance-config4"; - createInstanceConfig(projectId, baseInstanceConfig, instanceConfigId); + String instanceConfigName = "projects/my-project/instanceConfigs/custom-instance-config4"; + createInstanceConfig(projectId, baseInstanceConfig, instanceConfigId, instanceConfigName); } static void createInstanceConfig( - String projectId, String baseInstanceConfig, String instanceConfigName) throws IOException { - InstanceAdminSettings instanceAdminSettings = - InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); - InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(instanceAdminSettings); + String projectId, String baseInstanceConfig, String instanceConfigId, String instanceConfigName) throws IOException { + InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); final InstanceConfig baseConfig = instanceAdminClient.getInstanceConfig(baseInstanceConfig); - final List readOnlyReplicas = ImmutableList.of(baseConfig.getOptionalReplicas(0)); + + /** + * The replicas for the custom instance configuration must include all the replicas of the base + * configuration, in addition to at least one from the list of optional replicas of the base + * configuration. + */ + final List replicas = + Stream.concat(baseConfig.getReplicasList().stream(), + baseConfig.getOptionalReplicasList().stream().limit(1)).collect(Collectors.toList()); final InstanceConfig instanceConfig = InstanceConfig.newBuilder().setName(instanceConfigName).setBaseConfig(baseInstanceConfig) - .setDisplayName(instanceConfigName).addAllReplicas(readOnlyReplicas).build(); + .setDisplayName(instanceConfigId).addAllReplicas(replicas).build(); final CreateInstanceConfigRequest createInstanceConfigRequest = - CreateInstanceConfigRequest.newBuilder().setInstanceConfig(instanceConfig).build(); + CreateInstanceConfigRequest.newBuilder().setParent(projectId) + .setInstanceConfigId(instanceConfigId).setInstanceConfig(instanceConfig).build(); final OperationFuture operation = instanceAdminClient.createInstanceConfigAsync(createInstanceConfigRequest); try { diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java index b13f307d436..ddd0613c0d5 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java @@ -26,15 +26,12 @@ class DeleteInstanceConfigSample { static void deleteInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. - String projectId = "my-project"; String instanceConfigId = "projects/my-project/instanceConfigs/custom-user-config"; - deleteInstanceConfig(projectId, instanceConfigId); + deleteInstanceConfig(instanceConfigId); } - static void deleteInstanceConfig(String projectId, String instanceConfigId) throws IOException { - final InstanceAdminSettings instanceAdminSettings = - InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); - final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(instanceAdminSettings); + static void deleteInstanceConfig(String instanceConfigId) throws IOException { + final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); final DeleteInstanceConfigRequest request = DeleteInstanceConfigRequest.newBuilder().setName(instanceConfigId).build(); diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java index 06e2b0f719e..06bd5ece285 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java @@ -27,15 +27,12 @@ public class GetInstanceConfigSample { static void getInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. - final String projectId = "my-project"; final String instanceConfigName = "nam6"; - getInstanceConfig(projectId, instanceConfigName); + getInstanceConfig(instanceConfigName); } - static void getInstanceConfig(String projectId, String instanceConfigName) throws IOException { - final InstanceAdminSettings instanceAdminSettings = - InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); - final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(instanceAdminSettings); + static void getInstanceConfig(String instanceConfigName) throws IOException { + final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); final InstanceConfig instanceConfig = instanceAdminClient.getInstanceConfig(instanceConfigName); diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java index 2af4ca135d5..bd2f456a46a 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java @@ -28,22 +28,18 @@ public class ListInstanceConfigOperationsSample { static void listInstanceConfigOperations() throws IOException { // TODO(developer): Replace these variables before running the sample. - String projectId = "my-project"; - listInstanceConfigOperations(projectId); + String projectName = "projects/my-project"; + listInstanceConfigOperations(projectName); } - static void listInstanceConfigOperations(String projectId) throws IOException { - final InstanceAdminSettings instanceAdminSettings = - InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); - final InstanceAdminClient instanceAdminClient = - InstanceAdminClient.create(instanceAdminSettings); - + static void listInstanceConfigOperations(String projectName) throws IOException { + final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); try { System.out.printf( "Getting list of instance config operations for project %s...\n", - projectId); + projectName); final ListInstanceConfigOperationsRequest request = - ListInstanceConfigOperationsRequest.newBuilder().setFilter("(metadata.@type=type.googleapis.com/" + ListInstanceConfigOperationsRequest.newBuilder().setParent(projectName).setFilter("(metadata.@type=type.googleapis.com/" + "google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)").build(); final Iterable instanceConfigOperations = instanceAdminClient.listInstanceConfigOperations(request).iterateAll(); @@ -54,6 +50,9 @@ static void listInstanceConfigOperations(String projectId) throws IOException { "Create instance config operation for %s is %d%% completed.\n", metadata.getInstanceConfig().getName(), metadata.getProgress().getProgressPercent()); } + System.out.printf( + "Obtained list of instance config operations for project %s...\n", + projectName); } catch (InvalidProtocolBufferException e) { System.out.printf( "Error: Listing instance config operations failed with error message %s\n", diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java index a53bbc16691..3188883c689 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java @@ -26,14 +26,14 @@ public class ListInstanceConfigsSample { static void listInstanceConfigs() throws IOException { // TODO(developer): Replace these variables before running the sample. - final String projectId = "my-project"; - listInstanceConfigs(projectId); + String projectName = "projects/my-project"; + listInstanceConfigs(projectName); } - static void listInstanceConfigs(String projectId) throws IOException { + static void listInstanceConfigs(String projectName) throws IOException { final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); for (InstanceConfig instanceConfig : - instanceAdminClient.listInstanceConfigs(projectId).iterateAll()) { + instanceAdminClient.listInstanceConfigs(projectName).iterateAll()) { System.out.printf( "Available leader options for instance config %s: %s%n", instanceConfig.getName(), diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java index f327e341e51..f3d15c90566 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java @@ -32,16 +32,13 @@ class UpdateInstanceConfigSample { static void updateInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. - String projectId = "my-project"; String instanceConfigName = "projects/my-project/instanceConfigs/custom-instance-config"; - updateInstanceConfig(projectId, instanceConfigName); + updateInstanceConfig(instanceConfigName); } - static void updateInstanceConfig(String projectId, String instanceConfigName) throws IOException { - final InstanceAdminSettings instanceAdminSettings = - InstanceAdminSettings.newBuilder().setQuotaProjectId(projectId).build(); + static void updateInstanceConfig(String instanceConfigName) throws IOException { final com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient instanceAdminClient = - com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient.create(instanceAdminSettings); + com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient.create(); final InstanceConfig instanceConfig = InstanceConfig.newBuilder() .setName(instanceConfigName) diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CustomInstanceConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CustomInstanceConfigSampleIT.java index 29c2096765b..10476643f48 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CustomInstanceConfigSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CustomInstanceConfigSampleIT.java @@ -34,30 +34,45 @@ public void testCustomInstanceConfigOperations() throws Exception { final String out1 = SampleRunner.runSample( () -> - CreateInstanceConfigSample.createInstanceConfig( - projectId, instanceConfigName, customInstanceConfigId)); + CreateInstanceConfigSample.createInstanceConfig(getProjectName(projectId), + getInstanceConfigName(projectId, instanceConfigName), customInstanceConfigId, + getInstanceConfigName(projectId, customInstanceConfigId))); assertTrue(out1.contains("Created instance configuration")); - // List the instance config operations. + // Fetch the instance config that was created above. final String out2 = + SampleRunner.runSample( + () -> GetInstanceConfigSample.getInstanceConfig( + getInstanceConfigName(projectId, instanceConfigName))); + assertTrue(out2.contains("Available leader options for instance config")); + + // Fetch the instance config that was created above. + final String out3 = + SampleRunner.runSample( + () -> ListInstanceConfigsSample.listInstanceConfigs(getProjectName(projectId))); + assertTrue(out3.contains("Available leader options for instance config")); + + // List the instance config operations. + final String out4 = SampleRunner.runSample( () -> - ListInstanceConfigOperationsSample.listInstanceConfigOperations(projectId)); - assertTrue(out2.contains("List instance config operation")); + ListInstanceConfigOperationsSample.listInstanceConfigOperations(getProjectName(projectId))); + assertTrue(out4.contains("Obtained list of instance config operations")); // Update display name to a randomly generated instance config id. - final String out3 = + final String out5 = SampleRunner.runSample( () -> UpdateInstanceConfigSample.updateInstanceConfig( - projectId, customInstanceConfigId)); - assertTrue(out3.contains("Updated instance configuration")); + getInstanceConfigName(projectId, customInstanceConfigId))); + assertTrue(out5.contains("Updated instance configuration")); // Delete the created instance config. - final String out4 = + final String out6 = SampleRunner.runSample( () -> - DeleteInstanceConfigSample.deleteInstanceConfig(projectId, customInstanceConfigId)); - assertTrue(out4.contains("Deleted instance configuration")); + DeleteInstanceConfigSample.deleteInstanceConfig( + getInstanceConfigName(projectId, customInstanceConfigId))); + assertTrue(out6.contains("Deleted instance configuration")); } } 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 d60a0ca633e..fc7ff981d48 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 @@ -122,7 +122,7 @@ public static void afterClass() { for (String configId : idGenerator.getInstanceConfigIds()) { try { // If the config is not found, it is ignored (no exception is thrown) - instanceAdminClient.deleteInstanceConfig(configId); + instanceAdminClient.deleteInstanceConfig(getInstanceConfigName(projectId, configId)); } catch (Exception e) { System.out.println( "Failed to delete instance config " @@ -149,4 +149,12 @@ static String getBackupName(final String projectId, static String getInstanceName(final String projectId, final String instanceId) { return String.format("projects/%s/instances/%s", projectId, instanceId); } + + static String getInstanceConfigName(final String projectId, final String instanceConfigId) { + return String.format("projects/%s/instanceConfigs/%s", projectId, instanceConfigId); + } + + static String getProjectName(final String projectId) { + return String.format("projects/%s", projectId); + } } From 7fb407bf29ccaadda8ed496dc051c2aed2d950e6 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Tue, 26 Dec 2023 20:00:02 +0530 Subject: [PATCH 17/25] chore: add samples/tests for instance creation with processing units and auto-scaling. --- samples/install-without-bom/pom.xml | 1 + samples/native-image/pom.xml | 1 + samples/snapshot/pom.xml | 1 + .../v2/CreateInstanceConfigSample.java | 4 +- ...eInstanceWithAutoscalingConfigExample.java | 89 +++++++++++++++++++ ...ateInstanceWithProcessingUnitsExample.java | 11 +-- .../v2/DeleteInstanceConfigSample.java | 1 - .../spanner/v2/GetInstanceConfigSample.java | 1 - .../ListInstanceConfigOperationsSample.java | 1 - .../v2/UpdateInstanceConfigSample.java | 1 - ...InstanceWithAutoscalingConfigSampleIT.java | 36 ++++++++ ...teInstanceWithProcessingUnitsSampleIT.java | 37 ++++++++ 12 files changed, 169 insertions(+), 15 deletions(-) create mode 100644 samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigExample.java create mode 100644 samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigSampleIT.java create mode 100644 samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsSampleIT.java diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index 14042225c97..80c4648b5f9 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -15,6 +15,7 @@ com.google.cloud.samples shared-configuration 1.2.0 + diff --git a/samples/native-image/pom.xml b/samples/native-image/pom.xml index 7beb606063b..d4a8d10d74c 100644 --- a/samples/native-image/pom.xml +++ b/samples/native-image/pom.xml @@ -14,6 +14,7 @@ com.google.cloud.samples shared-configuration 1.2.0 + diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index d8109cd6b7a..8b12f83a315 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -15,6 +15,7 @@ com.google.cloud.samples shared-configuration 1.2.0 + diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java index 1750be6b082..60ef41283e7 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Google LLC + * 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. @@ -19,8 +19,6 @@ // [START spanner_create_instance_config] 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.common.collect.ImmutableList; import com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata; import com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest; import com.google.spanner.admin.instance.v1.InstanceConfig; diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigExample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigExample.java new file mode 100644 index 00000000000..e3893494475 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigExample.java @@ -0,0 +1,89 @@ +/* + * 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; + +// [START spanner_create_instance_with_autoscaling_config] + +import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; +import com.google.spanner.admin.instance.v1.AutoscalingConfig; +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; + +class CreateInstanceWithAutoscalingConfigExample { + + 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 { + InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); + + // Set Instance configuration. + String configId = "regional-us-central1"; + String displayName = "Descriptive name"; + + // Create an autoscaling config. + AutoscalingConfig autoscalingConfig = + AutoscalingConfig.newBuilder() + .setAutoscalingLimits( + AutoscalingConfig.AutoscalingLimits.newBuilder().setMinNodes(1).setMaxNodes(2)) + .setAutoscalingTargets( + AutoscalingConfig.AutoscalingTargets.newBuilder() + .setHighPriorityCpuUtilizationPercent(65) + .setStorageUtilizationPercent(95)) + .build(); + Instance instance = + Instance.newBuilder() + .setAutoscalingConfig(autoscalingConfig) + .setDisplayName(displayName) + .setConfig( + InstanceConfigName.of(projectId, configId).toString()) + .build(); + + // Creates a new instance + System.out.printf("Creating instance %s.%n", instanceId); + + 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 instanceResult = operation.get(); + System.out.printf("Autoscaler instance %s was successfully created%n", instanceResult.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_with_autoscaling_config] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java index 193f0924fbe..792c0b3abd1 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java @@ -20,7 +20,6 @@ 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; @@ -38,9 +37,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. String configId = "regional-us-central1"; @@ -71,10 +68,8 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti Instance createdInstance = operation.get(); System.out.printf("Created instance %s.%n", createdInstance.getName()); - - Instance instanceResult = instanceAdminClient.getInstance(instanceId); - System.out.printf("Instance %s has %d processing units.%n", instanceResult.getName(), - instanceResult.getProcessingUnits()); + System.out.printf("Instance %s has %d processing units.%n", createdInstance.getName(), + createdInstance.getProcessingUnits()); } catch (Exception e) { System.out.printf("Error: %s.%n", e.getMessage()); } diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java index ddd0613c0d5..6f26f3ecf17 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java @@ -19,7 +19,6 @@ // [START spanner_delete_instance_config] import com.google.cloud.spanner.SpannerException; 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.DeleteInstanceConfigRequest; import java.io.IOException; diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java index 06bd5ece285..97d05ae81b0 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java @@ -19,7 +19,6 @@ //[START spanner_get_instance_config] 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.InstanceConfig; import java.io.IOException; diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java index bd2f456a46a..3a2522d1944 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java @@ -18,7 +18,6 @@ // [START spanner_list_instance_config_operations] import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; -import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; import com.google.longrunning.Operation; import com.google.protobuf.InvalidProtocolBufferException; import com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata; diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java index f3d15c90566..c14c271d8e3 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java @@ -18,7 +18,6 @@ // [START spanner_update_instance_config] import com.google.api.gax.longrunning.OperationFuture; -import com.google.cloud.spanner.admin.instance.v1.InstanceAdminSettings; import com.google.common.collect.ImmutableList; import com.google.protobuf.FieldMask; import com.google.spanner.admin.instance.v1.InstanceConfig; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigSampleIT.java new file mode 100644 index 00000000000..4d38fb62dfa --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigSampleIT.java @@ -0,0 +1,36 @@ +/* + * 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 com.google.common.truth.Truth.assertThat; + +import com.example.spanner.SampleRunner; +import com.google.spanner.admin.database.v1.InstanceName; +import org.junit.Test; + +public class CreateInstanceWithAutoscalingConfigSampleIT extends SampleTestBaseV2 { + + @Test + public void testCreateInstanceWithAutoscalingConfig() throws Exception { + String instanceId = idGenerator.generateInstanceId(); + String out = + SampleRunner.runSample( + () -> CreateInstanceWithAutoscalingConfigExample.createInstance(projectId, instanceId)); + assertThat(out) + .contains(String.format("Autoscaler instance %s", InstanceName.of(projectId, instanceId).toString())); + } +} diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsSampleIT.java new file mode 100644 index 00000000000..d53ab4cf0b0 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsSampleIT.java @@ -0,0 +1,37 @@ +/* + * 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 com.google.common.truth.Truth.assertThat; + +import com.example.spanner.SampleRunner; +import com.google.spanner.admin.database.v1.InstanceName; +import org.junit.Test; + +public class CreateInstanceWithProcessingUnitsSampleIT extends SampleTestBaseV2 { + + @Test + public void testCreateInstanceWithProcessingUnits() throws Exception { + String instanceId = idGenerator.generateInstanceId(); + String out = + SampleRunner.runSample( + () -> CreateInstanceWithProcessingUnitsExample.createInstance(projectId, instanceId)); + assertThat(out) + .contains(String.format("Instance %s has %d processing units", + InstanceName.of(projectId, instanceId).toString(), 500)); + } +} From c602c5b03dbcdebe23ae694eb0ebdf91e6f439db Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Wed, 3 Jan 2024 23:30:55 +0530 Subject: [PATCH 18/25] chore:rename directory. --- .../CreateInstanceConfigSample.java | 2 +- ...eInstanceWithAutoscalingConfigExample.java | 2 +- ...ateInstanceWithProcessingUnitsExample.java | 2 +- .../DeleteInstanceConfigSample.java | 2 +- .../generated}/GetInstanceConfigSample.java | 2 +- .../ListInstanceConfigOperationsSample.java | 2 +- .../generated}/ListInstanceConfigsSample.java | 2 +- .../UpdateInstanceConfigSample.java | 2 +- ...InstanceWithAutoscalingConfigSampleIT.java | 2 +- ...teInstanceWithProcessingUnitsSampleIT.java | 2 +- .../CustomInstanceConfigSampleIT.java | 2 +- .../admin/generated/SampleTestBaseV2.java | 11 +- .../example/spanner/v2/SampleTestBaseV2.java | 160 ------------------ 13 files changed, 20 insertions(+), 173 deletions(-) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/CreateInstanceConfigSample.java (98%) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/CreateInstanceWithAutoscalingConfigExample.java (98%) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/CreateInstanceWithProcessingUnitsExample.java (98%) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/DeleteInstanceConfigSample.java (97%) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/GetInstanceConfigSample.java (97%) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/ListInstanceConfigOperationsSample.java (98%) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/ListInstanceConfigsSample.java (97%) rename samples/snippets/src/main/java/com/example/spanner/{v2 => admin/generated}/UpdateInstanceConfigSample.java (98%) rename samples/snippets/src/test/java/com/example/spanner/{v2 => admin/generated}/CreateInstanceWithAutoscalingConfigSampleIT.java (96%) rename samples/snippets/src/test/java/com/example/spanner/{v2 => admin/generated}/CreateInstanceWithProcessingUnitsSampleIT.java (96%) rename samples/snippets/src/test/java/com/example/spanner/{v2 => admin/generated}/CustomInstanceConfigSampleIT.java (98%) delete mode 100644 samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java similarity index 98% rename from samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java index 60ef41283e7..92e0dc9aa58 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; // [START spanner_create_instance_config] import com.google.api.gax.longrunning.OperationFuture; diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java similarity index 98% rename from samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigExample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java index e3893494475..409051750cf 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; // [START spanner_create_instance_with_autoscaling_config] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java similarity index 98% rename from samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java index 792c0b3abd1..7ba75963da8 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; //[START spanner_create_instance_with_processing_units] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java similarity index 97% rename from samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java index 6f26f3ecf17..27a5f2bd255 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/DeleteInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; // [START spanner_delete_instance_config] import com.google.cloud.spanner.SpannerException; diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java similarity index 97% rename from samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java index 97d05ae81b0..616248d02b9 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/GetInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; //[START spanner_get_instance_config] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java similarity index 98% rename from samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java index 3a2522d1944..d08c1bf6810 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigOperationsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; // [START spanner_list_instance_config_operations] import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java similarity index 97% rename from samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java index 3188883c689..3e4614bf67e 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/ListInstanceConfigsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; //[START spanner_list_instance_configs] diff --git a/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java similarity index 98% rename from samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java rename to samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java index c14c271d8e3..eebcac99fd3 100644 --- a/samples/snippets/src/main/java/com/example/spanner/v2/UpdateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; // [START spanner_update_instance_config] import com.google.api.gax.longrunning.OperationFuture; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java similarity index 96% rename from samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigSampleIT.java rename to samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java index 4d38fb62dfa..e5d7f178e2f 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithAutoscalingConfigSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; import static com.google.common.truth.Truth.assertThat; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsSampleIT.java similarity index 96% rename from samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsSampleIT.java rename to samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsSampleIT.java index d53ab4cf0b0..b8c7ddd702a 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CreateInstanceWithProcessingUnitsSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsSampleIT.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.example.spanner.v2; +package com.example.spanner.admin.generated; import static com.google.common.truth.Truth.assertThat; diff --git a/samples/snippets/src/test/java/com/example/spanner/v2/CustomInstanceConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java similarity index 98% rename from samples/snippets/src/test/java/com/example/spanner/v2/CustomInstanceConfigSampleIT.java rename to samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java index 10476643f48..9b0f2ac68fb 100644 --- a/samples/snippets/src/test/java/com/example/spanner/v2/CustomInstanceConfigSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.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/admin/generated/SampleTestBaseV2.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/SampleTestBaseV2.java index 30989214fa3..941f97fe859 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 @@ -124,7 +124,7 @@ public static void afterClass() throws InterruptedException { for (String configId : idGenerator.getInstanceConfigIds()) { try { // If the config is not found, it is ignored (no exception is thrown) - instanceAdminClient.deleteInstanceConfig(configId); + instanceAdminClient.deleteInstanceConfig(getInstanceConfigName(projectId, configId)); } catch (Exception e) { System.out.println( "Failed to delete instance config " @@ -134,7 +134,6 @@ public static void afterClass() throws InterruptedException { + ", skipping..."); } } - databaseAdminClient.close(); instanceAdminClient.close(); @@ -157,4 +156,12 @@ static String getBackupName(final String projectId, static String getInstanceName(final String projectId, final String instanceId) { return String.format("projects/%s/instances/%s", projectId, instanceId); } + + static String getInstanceConfigName(final String projectId, final String instanceConfigId) { + return String.format("projects/%s/instanceConfigs/%s", projectId, instanceConfigId); + } + + static String getProjectName(final String projectId) { + return String.format("projects/%s", projectId); + } } 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 deleted file mode 100644 index fc7ff981d48..00000000000 --- a/samples/snippets/src/test/java/com/example/spanner/v2/SampleTestBaseV2.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * 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; -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; - -/** - * Base class for sample integration intests using auto-generated admin clients. - */ -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"; - 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(); - final SpannerOptions options = optionsBuilder.build(); - final DatabaseAdminSettings.Builder databaseAdminSettingsBuilder = - DatabaseAdminSettings.newBuilder(); - final InstanceAdminSettings.Builder instanceAdminSettingBuilder = - InstanceAdminSettings.newBuilder(); - - if (!serverUrl.isEmpty()) { - databaseAdminSettingsBuilder.setEndpoint(serverUrl); - instanceAdminSettingBuilder.setEndpoint(serverUrl); - } - - 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, 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 { - // 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(getInstanceConfigName(projectId, configId)); - } catch (Exception e) { - System.out.println( - "Failed to delete instance config " - + configId - + " due to " - + e.getMessage() - + ", skipping..."); - } - } - } - - static String getDatabaseName(final String projectId, - final String instanceId, final String databaseId) { - return String.format( - "projects/%s/instances/%s/databases/%s", projectId, instanceId, databaseId); - } - - static String getBackupName(final String projectId, - final String instanceId, final String backupId) { - return String.format( - "projects/%s/instances/%s/backups/%s", projectId, instanceId, backupId); - } - - static String getInstanceName(final String projectId, final String instanceId) { - return String.format("projects/%s/instances/%s", projectId, instanceId); - } - - static String getInstanceConfigName(final String projectId, final String instanceConfigId) { - return String.format("projects/%s/instanceConfigs/%s", projectId, instanceConfigId); - } - - static String getProjectName(final String projectId) { - return String.format("projects/%s", projectId); - } -} From be2b50342c3dc41270c1f029d17a3632f299ffd4 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 4 Jan 2024 14:11:03 +0530 Subject: [PATCH 19/25] chore: minor fixes. --- .../spanner/CreateInstanceConfigSample.java | 4 ++-- .../generated/CreateInstanceConfigSample.java | 8 +++----- ...ateInstanceWithAutoscalingConfigExample.java | 17 ++++++----------- ...reateInstanceWithProcessingUnitsExample.java | 16 ++++++---------- .../generated/UpdateInstanceConfigSample.java | 8 +++----- 5 files changed, 20 insertions(+), 33 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java index 3a2741253e2..379e0e26172 100644 --- a/samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/CreateInstanceConfigSample.java @@ -47,9 +47,9 @@ static void createInstanceConfig( SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { final InstanceAdminClient instanceAdminClient = spanner.getInstanceAdminClient(); final InstanceConfig baseConfig = instanceAdminClient.getInstanceConfig(baseInstanceConfig); - final List readOnlyReplicas = + List readOnlyReplicas = ImmutableList.of(baseConfig.getOptionalReplicas().get(0)); - final InstanceConfigInfo instanceConfigInfo = + InstanceConfigInfo instanceConfigInfo = InstanceConfig.newBuilder(InstanceConfigId.of(projectId, instanceConfigId), baseConfig) .setDisplayName(instanceConfigId) .addReadOnlyReplicas(readOnlyReplicas) diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java index 92e0dc9aa58..7e59bf21e27 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java @@ -17,9 +17,7 @@ package com.example.spanner.admin.generated; // [START spanner_create_instance_config] -import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; -import com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata; import com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest; import com.google.spanner.admin.instance.v1.InstanceConfig; import com.google.spanner.admin.instance.v1.ReplicaInfo; @@ -60,11 +58,11 @@ static void createInstanceConfig( final CreateInstanceConfigRequest createInstanceConfigRequest = CreateInstanceConfigRequest.newBuilder().setParent(projectId) .setInstanceConfigId(instanceConfigId).setInstanceConfig(instanceConfig).build(); - final OperationFuture operation = - instanceAdminClient.createInstanceConfigAsync(createInstanceConfigRequest); try { System.out.printf("Waiting for create operation for %s to complete...\n", instanceConfigName); - InstanceConfig instanceConfigResult = operation.get(5, TimeUnit.MINUTES); + InstanceConfig instanceConfigResult = + instanceAdminClient.createInstanceConfigAsync( + createInstanceConfigRequest).get(5, TimeUnit.MINUTES); System.out.printf("Created instance configuration %s\n", instanceConfigResult.getName()); } catch (ExecutionException | TimeoutException e) { System.out.printf( diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java index 409051750cf..b15d7d8bf69 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java @@ -18,10 +18,8 @@ // [START spanner_create_instance_with_autoscaling_config] -import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.spanner.admin.instance.v1.AutoscalingConfig; -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; @@ -65,17 +63,14 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti // Creates a new instance System.out.printf("Creating instance %s.%n", instanceId); - - 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 instanceResult = operation.get(); + Instance instanceResult = instanceAdminClient.createInstanceAsync( + CreateInstanceRequest.newBuilder() + .setParent(ProjectName.of(projectId).toString()) + .setInstanceId(instanceId) + .setInstance(instance) + .build()).get(); System.out.printf("Autoscaler instance %s was successfully created%n", instanceResult.getName()); } catch (ExecutionException e) { System.out.printf( diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java index 7ba75963da8..41db6ff13b6 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java @@ -20,7 +20,6 @@ import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; -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; @@ -55,17 +54,14 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti .setConfig( InstanceConfigName.of(projectId, configId).toString()) .build(); - OperationFuture operation = - instanceAdminClient.createInstanceAsync( - CreateInstanceRequest.newBuilder() - .setParent(ProjectName.of(projectId).toString()) - .setInstanceId(instanceId) - .setInstance(instance) - .build()); - // Wait for the createInstance operation to finish. System.out.printf("Waiting for operation on %s to complete...%n", instanceId); - Instance createdInstance = operation.get(); + Instance createdInstance = instanceAdminClient.createInstanceAsync( + CreateInstanceRequest.newBuilder() + .setParent(ProjectName.of(projectId).toString()) + .setInstanceId(instanceId) + .setInstance(instance) + .build()).get(); System.out.printf("Created instance %s.%n", createdInstance.getName()); System.out.printf("Instance %s has %d processing units.%n", createdInstance.getName(), diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java index eebcac99fd3..8f14d36a3cb 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java @@ -17,11 +17,9 @@ package com.example.spanner.admin.generated; // [START spanner_update_instance_config] -import com.google.api.gax.longrunning.OperationFuture; import com.google.common.collect.ImmutableList; import com.google.protobuf.FieldMask; import com.google.spanner.admin.instance.v1.InstanceConfig; -import com.google.spanner.admin.instance.v1.UpdateInstanceConfigMetadata; import com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest; import java.io.IOException; import java.util.concurrent.ExecutionException; @@ -46,11 +44,11 @@ static void updateInstanceConfig(String instanceConfigName) throws IOException { final UpdateInstanceConfigRequest updateInstanceConfigRequest = UpdateInstanceConfigRequest.newBuilder().setInstanceConfig(instanceConfig).setUpdateMask( FieldMask.newBuilder().addAllPaths(ImmutableList.of("display_name", "labels")).build()).build(); - final OperationFuture operation = - instanceAdminClient.updateInstanceConfigAsync(updateInstanceConfigRequest); try { System.out.printf("Waiting for update operation on %s to complete...\n", instanceConfigName); - InstanceConfig instanceConfigResult = operation.get(5, TimeUnit.MINUTES); + InstanceConfig instanceConfigResult = + instanceAdminClient.updateInstanceConfigAsync( + updateInstanceConfigRequest).get(5, TimeUnit.MINUTES); System.out.printf( "Updated instance configuration %s with new display name %s\n", instanceConfigResult.getName(), instanceConfig.getDisplayName()); From 335b4656d3b4ffcd7679082e3d1011796abee48d Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 11 Jan 2024 15:14:05 +0530 Subject: [PATCH 20/25] chore: address comments. --- .../generated/CreateInstanceConfigSample.java | 27 +++++++++++-------- ...eInstanceWithAutoscalingConfigExample.java | 2 +- ...ateInstanceWithProcessingUnitsExample.java | 3 +-- .../generated/DeleteInstanceConfigSample.java | 19 +++++++------ .../generated/GetInstanceConfigSample.java | 14 ++++++---- .../ListInstanceConfigOperationsSample.java | 16 ++++++----- .../generated/ListInstanceConfigsSample.java | 10 ++++--- .../generated/UpdateInstanceConfigSample.java | 14 ++++++---- .../CustomInstanceConfigSampleIT.java | 18 +++++-------- 9 files changed, 70 insertions(+), 53 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java index 7e59bf21e27..6fd0b4d15a8 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,8 @@ import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest; import com.google.spanner.admin.instance.v1.InstanceConfig; +import com.google.spanner.admin.instance.v1.InstanceConfigName; +import com.google.spanner.admin.instance.v1.ProjectName; import com.google.spanner.admin.instance.v1.ReplicaInfo; import java.io.IOException; import java.util.List; @@ -32,18 +34,20 @@ class CreateInstanceConfigSample { static void createInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. - String projectId = "projects/my-project"; - String baseInstanceConfig = "nam11"; + String projectId = "my-project"; + String baseInstanceConfigId = "nam11"; String instanceConfigId = "custom-instance-config4"; - String instanceConfigName = "projects/my-project/instanceConfigs/custom-instance-config4"; - createInstanceConfig(projectId, baseInstanceConfig, instanceConfigId, instanceConfigName); + + createInstanceConfig(projectId, baseInstanceConfigId, instanceConfigId); } static void createInstanceConfig( - String projectId, String baseInstanceConfig, String instanceConfigId, String instanceConfigName) throws IOException { + String projectId, String baseInstanceConfigId, String instanceConfigId) throws IOException { InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - final InstanceConfig baseConfig = instanceAdminClient.getInstanceConfig(baseInstanceConfig); - + final InstanceConfigName baseInstanceConfigName = InstanceConfigName.of(projectId, baseInstanceConfigId); + final InstanceConfig baseConfig = + instanceAdminClient.getInstanceConfig(baseInstanceConfigName.toString()); + final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, instanceConfigId); /** * The replicas for the custom instance configuration must include all the replicas of the base * configuration, in addition to at least one from the list of optional replicas of the base @@ -53,10 +57,11 @@ static void createInstanceConfig( Stream.concat(baseConfig.getReplicasList().stream(), baseConfig.getOptionalReplicasList().stream().limit(1)).collect(Collectors.toList()); final InstanceConfig instanceConfig = - InstanceConfig.newBuilder().setName(instanceConfigName).setBaseConfig(baseInstanceConfig) - .setDisplayName(instanceConfigId).addAllReplicas(replicas).build(); + InstanceConfig.newBuilder().setName(instanceConfigName.toString()) + .setBaseConfig(baseInstanceConfigName.toString()) + .setDisplayName("Instance Configuration").addAllReplicas(replicas).build(); final CreateInstanceConfigRequest createInstanceConfigRequest = - CreateInstanceConfigRequest.newBuilder().setParent(projectId) + CreateInstanceConfigRequest.newBuilder().setParent(ProjectName.of(projectId).toString()) .setInstanceConfigId(instanceConfigId).setInstanceConfig(instanceConfig).build(); try { System.out.printf("Waiting for create operation for %s to complete...\n", instanceConfigName); diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java index b15d7d8bf69..0eb540a3103 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java index 41db6ff13b6..9bd8d3ba115 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,6 @@ //[START spanner_create_instance_with_processing_units] -import com.google.api.gax.longrunning.OperationFuture; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.spanner.admin.instance.v1.CreateInstanceRequest; import com.google.spanner.admin.instance.v1.Instance; diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java index 27a5f2bd255..f5a4bfd08bf 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,28 +20,31 @@ import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest; +import com.google.spanner.admin.instance.v1.InstanceConfigName; import java.io.IOException; class DeleteInstanceConfigSample { static void deleteInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. - String instanceConfigId = "projects/my-project/instanceConfigs/custom-user-config"; - deleteInstanceConfig(instanceConfigId); + String projectId = "my-project"; + String instanceConfigId = "custom-user-config"; + deleteInstanceConfig(projectId, instanceConfigId); } - static void deleteInstanceConfig(String instanceConfigId) throws IOException { + static void deleteInstanceConfig(String projectId, String instanceConfigId) throws IOException { final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); + final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, instanceConfigId); final DeleteInstanceConfigRequest request = - DeleteInstanceConfigRequest.newBuilder().setName(instanceConfigId).build(); + DeleteInstanceConfigRequest.newBuilder().setName(instanceConfigName.toString()).build(); try { - System.out.printf("Deleting %s...\n", instanceConfigId); + System.out.printf("Deleting %s...\n", instanceConfigName); instanceAdminClient.deleteInstanceConfig(request); - System.out.printf("Deleted instance configuration %s\n", instanceConfigId); + System.out.printf("Deleted instance configuration %s\n", instanceConfigName); } catch (SpannerException e) { System.out.printf( "Error: Deleting instance configuration %s failed with error message: %s\n", - instanceConfigId, e.getMessage()); + instanceConfigName, e.getMessage()); } } } diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java index 616248d02b9..907336aaa9b 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,20 +20,24 @@ import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.spanner.admin.instance.v1.InstanceConfig; +import com.google.spanner.admin.instance.v1.InstanceConfigName; import java.io.IOException; public class GetInstanceConfigSample { static void getInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. - final String instanceConfigName = "nam6"; - getInstanceConfig(instanceConfigName); + final String projectId = "my-project"; + final String instanceConfigId = "nam6"; + getInstanceConfig(projectId, instanceConfigId); } - static void getInstanceConfig(String instanceConfigName) throws IOException { + static void getInstanceConfig(String projectId, String instanceConfigId) throws IOException { final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); + final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, instanceConfigId); - final InstanceConfig instanceConfig = instanceAdminClient.getInstanceConfig(instanceConfigName); + final InstanceConfig instanceConfig = + instanceAdminClient.getInstanceConfig(instanceConfigName.toString()); System.out.printf( "Available leader options for instance config %s: %s%n", diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java index d08c1bf6810..da1e5abca64 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,23 +22,27 @@ import com.google.protobuf.InvalidProtocolBufferException; import com.google.spanner.admin.instance.v1.CreateInstanceConfigMetadata; import com.google.spanner.admin.instance.v1.ListInstanceConfigOperationsRequest; +import com.google.spanner.admin.instance.v1.ProjectName; import java.io.IOException; public class ListInstanceConfigOperationsSample { static void listInstanceConfigOperations() throws IOException { // TODO(developer): Replace these variables before running the sample. - String projectName = "projects/my-project"; - listInstanceConfigOperations(projectName); + String projectId = "my-project"; + listInstanceConfigOperations(projectId); } - static void listInstanceConfigOperations(String projectName) throws IOException { + static void listInstanceConfigOperations(String projectId) throws IOException { final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); + final ProjectName projectName = ProjectName.of(projectId); try { System.out.printf( "Getting list of instance config operations for project %s...\n", - projectName); + projectId); final ListInstanceConfigOperationsRequest request = - ListInstanceConfigOperationsRequest.newBuilder().setParent(projectName).setFilter("(metadata.@type=type.googleapis.com/" + ListInstanceConfigOperationsRequest.newBuilder() + .setParent(projectName.toString()) + .setFilter("(metadata.@type=type.googleapis.com/" + "google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)").build(); final Iterable instanceConfigOperations = instanceAdminClient.listInstanceConfigOperations(request).iterateAll(); diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java index 3e4614bf67e..a0b0eac1303 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java @@ -1,5 +1,5 @@ /* - * Copyright 2021 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,18 +20,20 @@ import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.spanner.admin.instance.v1.InstanceConfig; +import com.google.spanner.admin.instance.v1.ProjectName; import java.io.IOException; public class ListInstanceConfigsSample { static void listInstanceConfigs() throws IOException { // TODO(developer): Replace these variables before running the sample. - String projectName = "projects/my-project"; - listInstanceConfigs(projectName); + String projectId = "my-project"; + listInstanceConfigs(projectId); } - static void listInstanceConfigs(String projectName) throws IOException { + static void listInstanceConfigs(String projectId) throws IOException { final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); + final ProjectName projectName = ProjectName.of(projectId); for (InstanceConfig instanceConfig : instanceAdminClient.listInstanceConfigs(projectName).iterateAll()) { System.out.printf( diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java index 8f14d36a3cb..9c60fdfa11e 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java @@ -1,5 +1,5 @@ /* - * Copyright 2022 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableList; import com.google.protobuf.FieldMask; import com.google.spanner.admin.instance.v1.InstanceConfig; +import com.google.spanner.admin.instance.v1.InstanceConfigName; import com.google.spanner.admin.instance.v1.UpdateInstanceConfigRequest; import java.io.IOException; import java.util.concurrent.ExecutionException; @@ -29,16 +30,19 @@ class UpdateInstanceConfigSample { static void updateInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. - String instanceConfigName = "projects/my-project/instanceConfigs/custom-instance-config"; - updateInstanceConfig(instanceConfigName); + String projectId = "my-project"; + String instanceConfigId = "custom-instance-config"; + updateInstanceConfig(projectId, instanceConfigId); } - static void updateInstanceConfig(String instanceConfigName) throws IOException { + static void updateInstanceConfig(String projectId, String instanceConfigId) throws IOException { final com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient instanceAdminClient = com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient.create(); + final InstanceConfigName instanceConfigName = + InstanceConfigName.of(projectId, instanceConfigId); final InstanceConfig instanceConfig = InstanceConfig.newBuilder() - .setName(instanceConfigName) + .setName(instanceConfigName.toString()) .setDisplayName("updated custom instance config") .putLabels("updated", "true").build(); final UpdateInstanceConfigRequest updateInstanceConfigRequest = diff --git a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java index 9b0f2ac68fb..4bf4c10ff01 100644 --- a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java @@ -34,45 +34,41 @@ public void testCustomInstanceConfigOperations() throws Exception { final String out1 = SampleRunner.runSample( () -> - CreateInstanceConfigSample.createInstanceConfig(getProjectName(projectId), - getInstanceConfigName(projectId, instanceConfigName), customInstanceConfigId, - getInstanceConfigName(projectId, customInstanceConfigId))); + CreateInstanceConfigSample.createInstanceConfig( + projectId, instanceConfigName, customInstanceConfigId)); assertTrue(out1.contains("Created instance configuration")); // Fetch the instance config that was created above. final String out2 = SampleRunner.runSample( - () -> GetInstanceConfigSample.getInstanceConfig( - getInstanceConfigName(projectId, instanceConfigName))); + () -> GetInstanceConfigSample.getInstanceConfig(projectId, instanceConfigName)); assertTrue(out2.contains("Available leader options for instance config")); // Fetch the instance config that was created above. final String out3 = SampleRunner.runSample( - () -> ListInstanceConfigsSample.listInstanceConfigs(getProjectName(projectId))); + () -> ListInstanceConfigsSample.listInstanceConfigs(projectId)); assertTrue(out3.contains("Available leader options for instance config")); // List the instance config operations. final String out4 = SampleRunner.runSample( () -> - ListInstanceConfigOperationsSample.listInstanceConfigOperations(getProjectName(projectId))); + ListInstanceConfigOperationsSample.listInstanceConfigOperations(projectId)); assertTrue(out4.contains("Obtained list of instance config operations")); // Update display name to a randomly generated instance config id. final String out5 = SampleRunner.runSample( () -> - UpdateInstanceConfigSample.updateInstanceConfig( - getInstanceConfigName(projectId, customInstanceConfigId))); + UpdateInstanceConfigSample.updateInstanceConfig(projectId, customInstanceConfigId)); assertTrue(out5.contains("Updated instance configuration")); // Delete the created instance config. final String out6 = SampleRunner.runSample( () -> - DeleteInstanceConfigSample.deleteInstanceConfig( - getInstanceConfigName(projectId, customInstanceConfigId))); + DeleteInstanceConfigSample.deleteInstanceConfig(projectId, customInstanceConfigId)); assertTrue(out6.contains("Deleted instance configuration")); } } From 97ee48520c1b1687d486c675ee2b12f8f4f0dc4a Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 11 Jan 2024 15:56:26 +0530 Subject: [PATCH 21/25] chore: fix lint errors. --- .../generated/CreateInstanceConfigSample.java | 8 ++++++-- ...CreateInstanceWithAutoscalingConfigExample.java | 5 ++++- .../admin/generated/GetInstanceConfigSample.java | 3 ++- .../generated/UpdateInstanceConfigSample.java | 14 ++++++++++++-- ...reateInstanceWithAutoscalingConfigSampleIT.java | 2 +- .../CreateInstanceWithProcessingUnitsSampleIT.java | 2 +- .../generated/CustomInstanceConfigSampleIT.java | 2 +- 7 files changed, 27 insertions(+), 9 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java index 6fd0b4d15a8..3427ddd9a57 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java @@ -17,6 +17,7 @@ package com.example.spanner.admin.generated; // [START spanner_create_instance_config] + import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest; import com.google.spanner.admin.instance.v1.InstanceConfig; @@ -32,6 +33,7 @@ import java.util.stream.Stream; class CreateInstanceConfigSample { + static void createInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. String projectId = "my-project"; @@ -44,10 +46,12 @@ static void createInstanceConfig() throws IOException { static void createInstanceConfig( String projectId, String baseInstanceConfigId, String instanceConfigId) throws IOException { InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - final InstanceConfigName baseInstanceConfigName = InstanceConfigName.of(projectId, baseInstanceConfigId); + final InstanceConfigName baseInstanceConfigName = InstanceConfigName.of(projectId, + baseInstanceConfigId); final InstanceConfig baseConfig = instanceAdminClient.getInstanceConfig(baseInstanceConfigName.toString()); - final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, instanceConfigId); + final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, + instanceConfigId); /** * The replicas for the custom instance configuration must include all the replicas of the base * configuration, in addition to at least one from the list of optional replicas of the base diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java index 0eb540a3103..8fa8a718687 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java @@ -44,6 +44,8 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti String displayName = "Descriptive name"; // Create an autoscaling config. + // When autoscaling_config is enabled, node_count and processing_units fields + // need not be specified. AutoscalingConfig autoscalingConfig = AutoscalingConfig.newBuilder() .setAutoscalingLimits( @@ -71,7 +73,8 @@ static void createInstance(String projectId, String instanceId) throws IOExcepti .setInstanceId(instanceId) .setInstance(instance) .build()).get(); - System.out.printf("Autoscaler instance %s was successfully created%n", instanceResult.getName()); + System.out.printf("Autoscaler instance %s was successfully created%n", + instanceResult.getName()); } catch (ExecutionException e) { System.out.printf( "Error: Creating instance %s failed with error message %s%n", diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java index 907336aaa9b..d6ed8f33be9 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java @@ -34,7 +34,8 @@ static void getInstanceConfig() throws IOException { static void getInstanceConfig(String projectId, String instanceConfigId) throws IOException { final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, instanceConfigId); + final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, + instanceConfigId); final InstanceConfig instanceConfig = instanceAdminClient.getInstanceConfig(instanceConfigName.toString()); diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java index 9c60fdfa11e..a0425a311d1 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java @@ -17,6 +17,7 @@ package com.example.spanner.admin.generated; // [START spanner_update_instance_config] + import com.google.common.collect.ImmutableList; import com.google.protobuf.FieldMask; import com.google.spanner.admin.instance.v1.InstanceConfig; @@ -28,6 +29,7 @@ import java.util.concurrent.TimeoutException; class UpdateInstanceConfigSample { + static void updateInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. String projectId = "my-project"; @@ -45,9 +47,17 @@ static void updateInstanceConfig(String projectId, String instanceConfigId) thro .setName(instanceConfigName.toString()) .setDisplayName("updated custom instance config") .putLabels("updated", "true").build(); + /** + * The field mask must always be specified; this prevents any future + * fields in [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig] + * from being erased accidentally by clients that do not know about them. + */ final UpdateInstanceConfigRequest updateInstanceConfigRequest = - UpdateInstanceConfigRequest.newBuilder().setInstanceConfig(instanceConfig).setUpdateMask( - FieldMask.newBuilder().addAllPaths(ImmutableList.of("display_name", "labels")).build()).build(); + UpdateInstanceConfigRequest.newBuilder() + .setInstanceConfig(instanceConfig) + .setUpdateMask( + FieldMask.newBuilder().addAllPaths(ImmutableList.of("display_name", "labels")) + .build()).build(); try { System.out.printf("Waiting for update operation on %s to complete...\n", instanceConfigName); InstanceConfig instanceConfigResult = diff --git a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java index e5d7f178e2f..6fa0a772c56 100644 --- a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsSampleIT.java index b8c7ddd702a..13778dff825 100644 --- a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsSampleIT.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java index 4bf4c10ff01..8a01d2a7a6b 100644 --- a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CustomInstanceConfigSampleIT.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 Google LLC + * Copyright 2024 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From fbf4df5056b3066580e90f793935ddb4af37aab4 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 11 Jan 2024 16:00:24 +0530 Subject: [PATCH 22/25] chore: fix lint errors. --- .../spanner/admin/generated/DeleteInstanceConfigSample.java | 5 ++++- .../CreateInstanceWithAutoscalingConfigSampleIT.java | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java index f5a4bfd08bf..042cda081ba 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java @@ -17,6 +17,7 @@ package com.example.spanner.admin.generated; // [START spanner_delete_instance_config] + import com.google.cloud.spanner.SpannerException; import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.spanner.admin.instance.v1.DeleteInstanceConfigRequest; @@ -24,6 +25,7 @@ import java.io.IOException; class DeleteInstanceConfigSample { + static void deleteInstanceConfig() throws IOException { // TODO(developer): Replace these variables before running the sample. String projectId = "my-project"; @@ -33,7 +35,8 @@ static void deleteInstanceConfig() throws IOException { static void deleteInstanceConfig(String projectId, String instanceConfigId) throws IOException { final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, instanceConfigId); + final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, + instanceConfigId); final DeleteInstanceConfigRequest request = DeleteInstanceConfigRequest.newBuilder().setName(instanceConfigName.toString()).build(); diff --git a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java index 6fa0a772c56..86224cfd305 100644 --- a/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigSampleIT.java @@ -31,6 +31,7 @@ public void testCreateInstanceWithAutoscalingConfig() throws Exception { SampleRunner.runSample( () -> CreateInstanceWithAutoscalingConfigExample.createInstance(projectId, instanceId)); assertThat(out) - .contains(String.format("Autoscaler instance %s", InstanceName.of(projectId, instanceId).toString())); + .contains(String.format("Autoscaler instance %s", + InstanceName.of(projectId, instanceId).toString())); } } From 1b6a01130e22c48a119cc345d77a2f06acf38151 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Thu, 11 Jan 2024 17:55:37 +0000 Subject: [PATCH 23/25] =?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 | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 417e48553d8..5b94cdadb35 100644 --- a/README.md +++ b/README.md @@ -57,13 +57,13 @@ implementation 'com.google.cloud:google-cloud-spanner' If you are using Gradle without BOM, add this to your dependencies: ```Groovy -implementation 'com.google.cloud:google-cloud-spanner:6.55.0' +implementation 'com.google.cloud:google-cloud-spanner:6.56.0' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.55.0" +libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.56.0" ``` @@ -331,7 +331,15 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-spanner/tree/ | 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 Config Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.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/CreateInstanceConfigSample.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) | +| Create Instance With Autoscaling Config Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.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/CreateInstanceWithAutoscalingConfigExample.java) | +| Create Instance With Processing Units Example | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.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/CreateInstanceWithProcessingUnitsExample.java) | +| Delete Instance Config Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.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/DeleteInstanceConfigSample.java) | +| Get Instance Config Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.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/GetInstanceConfigSample.java) | +| List Instance Config Operations Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.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/ListInstanceConfigOperationsSample.java) | +| List Instance Configs Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.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/ListInstanceConfigsSample.java) | +| Update Instance Config Sample | [source code](https://github.com/googleapis/java-spanner/blob/main/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.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/UpdateInstanceConfigSample.java) | @@ -435,7 +443,7 @@ Java is a registered trademark of Oracle and/or its affiliates. [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.html [stability-image]: https://img.shields.io/badge/stability-stable-green [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg -[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.55.0 +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.56.0 [authentication]: https://github.com/googleapis/google-cloud-java#authentication [auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes [predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles From a975ecfd85f0b0d1339069aa7cefff500f823bdc Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 11 Jan 2024 23:41:08 +0530 Subject: [PATCH 24/25] chore: close client resources. --- ...CreateDatabaseWithDefaultLeaderSample.java | 4 +- .../generated/CreateInstanceConfigSample.java | 72 ++++++++-------- .../generated/CreateInstanceExample.java | 57 ++++++------- ...eInstanceWithAutoscalingConfigExample.java | 84 +++++++++---------- ...ateInstanceWithProcessingUnitsExample.java | 60 ++++++------- .../generated/DeleteInstanceConfigSample.java | 27 +++--- .../generated/GetInstanceConfigSample.java | 25 +++--- .../ListInstanceConfigOperationsSample.java | 9 +- .../generated/ListInstanceConfigsSample.java | 19 +++-- .../generated/UpdateInstanceConfigSample.java | 74 ++++++++-------- 10 files changed, 219 insertions(+), 212 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 eedbca8095a..853ec557b94 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 @@ -39,9 +39,7 @@ static void createDatabaseWithDefaultLeader() throws IOException { static void createDatabaseWithDefaultLeader(String instanceName, String databaseId, String defaultLeader) throws IOException { - DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create(); - - try { + try (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) { Database createdDatabase = databaseAdminClient.createDatabaseAsync( CreateDatabaseRequest.newBuilder() diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java index 3427ddd9a57..258f1aff051 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java @@ -45,41 +45,43 @@ static void createInstanceConfig() throws IOException { static void createInstanceConfig( String projectId, String baseInstanceConfigId, String instanceConfigId) throws IOException { - InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - final InstanceConfigName baseInstanceConfigName = InstanceConfigName.of(projectId, - baseInstanceConfigId); - final InstanceConfig baseConfig = - instanceAdminClient.getInstanceConfig(baseInstanceConfigName.toString()); - final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, - instanceConfigId); - /** - * The replicas for the custom instance configuration must include all the replicas of the base - * configuration, in addition to at least one from the list of optional replicas of the base - * configuration. - */ - final List replicas = - Stream.concat(baseConfig.getReplicasList().stream(), - baseConfig.getOptionalReplicasList().stream().limit(1)).collect(Collectors.toList()); - final InstanceConfig instanceConfig = - InstanceConfig.newBuilder().setName(instanceConfigName.toString()) - .setBaseConfig(baseInstanceConfigName.toString()) - .setDisplayName("Instance Configuration").addAllReplicas(replicas).build(); - final CreateInstanceConfigRequest createInstanceConfigRequest = - CreateInstanceConfigRequest.newBuilder().setParent(ProjectName.of(projectId).toString()) - .setInstanceConfigId(instanceConfigId).setInstanceConfig(instanceConfig).build(); - try { - System.out.printf("Waiting for create operation for %s to complete...\n", instanceConfigName); - InstanceConfig instanceConfigResult = - instanceAdminClient.createInstanceConfigAsync( - createInstanceConfigRequest).get(5, TimeUnit.MINUTES); - System.out.printf("Created instance configuration %s\n", instanceConfigResult.getName()); - } catch (ExecutionException | TimeoutException e) { - System.out.printf( - "Error: Creating instance configuration %s failed with error message %s\n", - instanceConfig.getName(), e.getMessage()); - } catch (InterruptedException e) { - System.out.println( - "Error: Waiting for createInstanceConfig operation to finish was interrupted"); + try (InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) { + final InstanceConfigName baseInstanceConfigName = InstanceConfigName.of(projectId, + baseInstanceConfigId); + final InstanceConfig baseConfig = + instanceAdminClient.getInstanceConfig(baseInstanceConfigName.toString()); + final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, + instanceConfigId); + /** + * The replicas for the custom instance configuration must include all the replicas of the base + * configuration, in addition to at least one from the list of optional replicas of the base + * configuration. + */ + final List replicas = + Stream.concat(baseConfig.getReplicasList().stream(), + baseConfig.getOptionalReplicasList().stream().limit(1)).collect(Collectors.toList()); + final InstanceConfig instanceConfig = + InstanceConfig.newBuilder().setName(instanceConfigName.toString()) + .setBaseConfig(baseInstanceConfigName.toString()) + .setDisplayName("Instance Configuration").addAllReplicas(replicas).build(); + final CreateInstanceConfigRequest createInstanceConfigRequest = + CreateInstanceConfigRequest.newBuilder().setParent(ProjectName.of(projectId).toString()) + .setInstanceConfigId(instanceConfigId).setInstanceConfig(instanceConfig).build(); + try { + System.out.printf("Waiting for create operation for %s to complete...\n", + instanceConfigName); + InstanceConfig instanceConfigResult = + instanceAdminClient.createInstanceConfigAsync( + createInstanceConfigRequest).get(5, TimeUnit.MINUTES); + System.out.printf("Created instance configuration %s\n", instanceConfigResult.getName()); + } catch (ExecutionException | TimeoutException e) { + System.out.printf( + "Error: Creating instance configuration %s failed with error message %s\n", + instanceConfig.getName(), e.getMessage()); + } catch (InterruptedException e) { + System.out.println( + "Error: Waiting for createInstanceConfig operation to finish was interrupted"); + } } } } 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 88675c414cf..8664c85b444 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,6 +17,7 @@ package com.example.spanner.admin.generated; //[START spanner_create_instance] + import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.spanner.admin.instance.v1.CreateInstanceRequest; import com.google.spanner.admin.instance.v1.Instance; @@ -35,35 +36,35 @@ static void createInstance() throws IOException { } static void createInstance(String projectId, String instanceId) throws IOException { - InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - - // Set Instance configuration. - int nodeCount = 2; - String displayName = "Descriptive name"; + try (InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) { + // 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( - InstanceConfigName.of(projectId, "regional-us-central1").toString()) - .build(); - try { - // Wait for the createInstance operation to finish. - 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( - "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"); + // Create an Instance object that will be used to create the instance. + Instance instance = + Instance.newBuilder() + .setDisplayName(displayName) + .setNodeCount(nodeCount) + .setConfig( + InstanceConfigName.of(projectId, "regional-us-central1").toString()) + .build(); + try { + // Wait for the createInstance operation to finish. + 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( + "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"); + } } } } diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java index 8fa8a718687..aa785fe57d0 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithAutoscalingConfigExample.java @@ -37,50 +37,50 @@ static void createInstance() throws IOException { } static void createInstance(String projectId, String instanceId) throws IOException { - InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); + try (InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) { + // Set Instance configuration. + String configId = "regional-us-central1"; + String displayName = "Descriptive name"; - // Set Instance configuration. - String configId = "regional-us-central1"; - String displayName = "Descriptive name"; + // Create an autoscaling config. + // When autoscaling_config is enabled, node_count and processing_units fields + // need not be specified. + AutoscalingConfig autoscalingConfig = + AutoscalingConfig.newBuilder() + .setAutoscalingLimits( + AutoscalingConfig.AutoscalingLimits.newBuilder().setMinNodes(1).setMaxNodes(2)) + .setAutoscalingTargets( + AutoscalingConfig.AutoscalingTargets.newBuilder() + .setHighPriorityCpuUtilizationPercent(65) + .setStorageUtilizationPercent(95)) + .build(); + Instance instance = + Instance.newBuilder() + .setAutoscalingConfig(autoscalingConfig) + .setDisplayName(displayName) + .setConfig( + InstanceConfigName.of(projectId, configId).toString()) + .build(); - // Create an autoscaling config. - // When autoscaling_config is enabled, node_count and processing_units fields - // need not be specified. - AutoscalingConfig autoscalingConfig = - AutoscalingConfig.newBuilder() - .setAutoscalingLimits( - AutoscalingConfig.AutoscalingLimits.newBuilder().setMinNodes(1).setMaxNodes(2)) - .setAutoscalingTargets( - AutoscalingConfig.AutoscalingTargets.newBuilder() - .setHighPriorityCpuUtilizationPercent(65) - .setStorageUtilizationPercent(95)) - .build(); - Instance instance = - Instance.newBuilder() - .setAutoscalingConfig(autoscalingConfig) - .setDisplayName(displayName) - .setConfig( - InstanceConfigName.of(projectId, configId).toString()) - .build(); - - // Creates a new instance - System.out.printf("Creating instance %s.%n", instanceId); - try { - // Wait for the createInstance operation to finish. - Instance instanceResult = instanceAdminClient.createInstanceAsync( - CreateInstanceRequest.newBuilder() - .setParent(ProjectName.of(projectId).toString()) - .setInstanceId(instanceId) - .setInstance(instance) - .build()).get(); - System.out.printf("Autoscaler instance %s was successfully created%n", - instanceResult.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"); + // Creates a new instance + System.out.printf("Creating instance %s.%n", instanceId); + try { + // Wait for the createInstance operation to finish. + Instance instanceResult = instanceAdminClient.createInstanceAsync( + CreateInstanceRequest.newBuilder() + .setParent(ProjectName.of(projectId).toString()) + .setInstanceId(instanceId) + .setInstance(instance) + .build()).get(); + System.out.printf("Autoscaler instance %s was successfully created%n", + instanceResult.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"); + } } } } diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java index 9bd8d3ba115..9aa0487098b 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceWithProcessingUnitsExample.java @@ -35,38 +35,38 @@ static void createInstance() throws IOException { } static void createInstance(String projectId, String instanceId) throws IOException { - InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); + try (InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) { + // Set Instance configuration. + String configId = "regional-us-central1"; + // This will create an instance with the processing power of 0.2 nodes. + int processingUnits = 500; + String displayName = "Descriptive name"; - // Set Instance configuration. - String configId = "regional-us-central1"; - // This will create an instance with the processing power of 0.2 nodes. - int processingUnits = 500; - String displayName = "Descriptive name"; + try { + // Creates a new instance + System.out.printf("Creating instance %s.%n", instanceId); + Instance instance = + Instance.newBuilder() + .setDisplayName(displayName) + .setProcessingUnits(processingUnits) + .setConfig( + InstanceConfigName.of(projectId, configId).toString()) + .build(); + // Wait for the createInstance operation to finish. + System.out.printf("Waiting for operation on %s to complete...%n", instanceId); + Instance createdInstance = instanceAdminClient.createInstanceAsync( + CreateInstanceRequest.newBuilder() + .setParent(ProjectName.of(projectId).toString()) + .setInstanceId(instanceId) + .setInstance(instance) + .build()).get(); - try { - // Creates a new instance - System.out.printf("Creating instance %s.%n", instanceId); - Instance instance = - Instance.newBuilder() - .setDisplayName(displayName) - .setProcessingUnits(processingUnits) - .setConfig( - InstanceConfigName.of(projectId, configId).toString()) - .build(); - // Wait for the createInstance operation to finish. - System.out.printf("Waiting for operation on %s to complete...%n", instanceId); - Instance createdInstance = instanceAdminClient.createInstanceAsync( - CreateInstanceRequest.newBuilder() - .setParent(ProjectName.of(projectId).toString()) - .setInstanceId(instanceId) - .setInstance(instance) - .build()).get(); - - System.out.printf("Created instance %s.%n", createdInstance.getName()); - System.out.printf("Instance %s has %d processing units.%n", createdInstance.getName(), - createdInstance.getProcessingUnits()); - } catch (Exception e) { - System.out.printf("Error: %s.%n", e.getMessage()); + System.out.printf("Created instance %s.%n", createdInstance.getName()); + System.out.printf("Instance %s has %d processing units.%n", createdInstance.getName(), + createdInstance.getProcessingUnits()); + } catch (Exception e) { + System.out.printf("Error: %s.%n", e.getMessage()); + } } } } diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java index 042cda081ba..1fa9aee586c 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/DeleteInstanceConfigSample.java @@ -34,20 +34,21 @@ static void deleteInstanceConfig() throws IOException { } static void deleteInstanceConfig(String projectId, String instanceConfigId) throws IOException { - final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, - instanceConfigId); - final DeleteInstanceConfigRequest request = - DeleteInstanceConfigRequest.newBuilder().setName(instanceConfigName.toString()).build(); + try (final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) { + final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, + instanceConfigId); + final DeleteInstanceConfigRequest request = + DeleteInstanceConfigRequest.newBuilder().setName(instanceConfigName.toString()).build(); - try { - System.out.printf("Deleting %s...\n", instanceConfigName); - instanceAdminClient.deleteInstanceConfig(request); - System.out.printf("Deleted instance configuration %s\n", instanceConfigName); - } catch (SpannerException e) { - System.out.printf( - "Error: Deleting instance configuration %s failed with error message: %s\n", - instanceConfigName, e.getMessage()); + try { + System.out.printf("Deleting %s...\n", instanceConfigName); + instanceAdminClient.deleteInstanceConfig(request); + System.out.printf("Deleted instance configuration %s\n", instanceConfigName); + } catch (SpannerException e) { + System.out.printf( + "Error: Deleting instance configuration %s failed with error message: %s\n", + instanceConfigName, e.getMessage()); + } } } } diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java index d6ed8f33be9..5fc1b907479 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/GetInstanceConfigSample.java @@ -33,18 +33,19 @@ static void getInstanceConfig() throws IOException { } static void getInstanceConfig(String projectId, String instanceConfigId) throws IOException { - final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, - instanceConfigId); - - final InstanceConfig instanceConfig = - instanceAdminClient.getInstanceConfig(instanceConfigName.toString()); - - System.out.printf( - "Available leader options for instance config %s: %s%n", - instanceConfig.getName(), - instanceConfig.getLeaderOptionsList() - ); + try (final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) { + final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, + instanceConfigId); + + final InstanceConfig instanceConfig = + instanceAdminClient.getInstanceConfig(instanceConfigName.toString()); + + System.out.printf( + "Available leader options for instance config %s: %s%n", + instanceConfig.getName(), + instanceConfig.getLeaderOptionsList() + ); + } } } //[END spanner_get_instance_config] diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java index da1e5abca64..6970c500694 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigOperationsSample.java @@ -17,6 +17,7 @@ package com.example.spanner.admin.generated; // [START spanner_list_instance_config_operations] + import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.longrunning.Operation; import com.google.protobuf.InvalidProtocolBufferException; @@ -26,6 +27,7 @@ import java.io.IOException; public class ListInstanceConfigOperationsSample { + static void listInstanceConfigOperations() throws IOException { // TODO(developer): Replace these variables before running the sample. String projectId = "my-project"; @@ -33,9 +35,8 @@ static void listInstanceConfigOperations() throws IOException { } static void listInstanceConfigOperations(String projectId) throws IOException { - final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - final ProjectName projectName = ProjectName.of(projectId); - try { + try (final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) { + final ProjectName projectName = ProjectName.of(projectId); System.out.printf( "Getting list of instance config operations for project %s...\n", projectId); @@ -43,7 +44,7 @@ static void listInstanceConfigOperations(String projectId) throws IOException { ListInstanceConfigOperationsRequest.newBuilder() .setParent(projectName.toString()) .setFilter("(metadata.@type=type.googleapis.com/" - + "google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)").build(); + + "google.spanner.admin.instance.v1.CreateInstanceConfigMetadata)").build(); final Iterable instanceConfigOperations = instanceAdminClient.listInstanceConfigOperations(request).iterateAll(); for (Operation operation : instanceConfigOperations) { diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java index a0b0eac1303..92a0c7014e9 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/ListInstanceConfigsSample.java @@ -32,15 +32,16 @@ static void listInstanceConfigs() throws IOException { } static void listInstanceConfigs(String projectId) throws IOException { - final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create(); - final ProjectName projectName = ProjectName.of(projectId); - for (InstanceConfig instanceConfig : - instanceAdminClient.listInstanceConfigs(projectName).iterateAll()) { - System.out.printf( - "Available leader options for instance config %s: %s%n", - instanceConfig.getName(), - instanceConfig.getLeaderOptionsList() - ); + try (final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) { + final ProjectName projectName = ProjectName.of(projectId); + for (InstanceConfig instanceConfig : + instanceAdminClient.listInstanceConfigs(projectName).iterateAll()) { + System.out.printf( + "Available leader options for instance config %s: %s%n", + instanceConfig.getName(), + instanceConfig.getLeaderOptionsList() + ); + } } } } diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java index a0425a311d1..1fb5cd0e6fb 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/UpdateInstanceConfigSample.java @@ -18,6 +18,7 @@ // [START spanner_update_instance_config] +import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient; import com.google.common.collect.ImmutableList; import com.google.protobuf.FieldMask; import com.google.spanner.admin.instance.v1.InstanceConfig; @@ -38,42 +39,43 @@ static void updateInstanceConfig() throws IOException { } static void updateInstanceConfig(String projectId, String instanceConfigId) throws IOException { - final com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient instanceAdminClient = - com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient.create(); - final InstanceConfigName instanceConfigName = - InstanceConfigName.of(projectId, instanceConfigId); - final InstanceConfig instanceConfig = - InstanceConfig.newBuilder() - .setName(instanceConfigName.toString()) - .setDisplayName("updated custom instance config") - .putLabels("updated", "true").build(); - /** - * The field mask must always be specified; this prevents any future - * fields in [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig] - * from being erased accidentally by clients that do not know about them. - */ - final UpdateInstanceConfigRequest updateInstanceConfigRequest = - UpdateInstanceConfigRequest.newBuilder() - .setInstanceConfig(instanceConfig) - .setUpdateMask( - FieldMask.newBuilder().addAllPaths(ImmutableList.of("display_name", "labels")) - .build()).build(); - try { - System.out.printf("Waiting for update operation on %s to complete...\n", instanceConfigName); - InstanceConfig instanceConfigResult = - instanceAdminClient.updateInstanceConfigAsync( - updateInstanceConfigRequest).get(5, TimeUnit.MINUTES); - System.out.printf( - "Updated instance configuration %s with new display name %s\n", - instanceConfigResult.getName(), instanceConfig.getDisplayName()); - } catch (ExecutionException | TimeoutException e) { - System.out.printf( - "Error: Updating instance config %s failed with error message %s\n", - instanceConfig.getName(), e.getMessage()); - e.printStackTrace(); - } catch (InterruptedException e) { - System.out.println( - "Error: Waiting for updateInstanceConfig operation to finish was interrupted"); + try (final InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) { + final InstanceConfigName instanceConfigName = + InstanceConfigName.of(projectId, instanceConfigId); + final InstanceConfig instanceConfig = + InstanceConfig.newBuilder() + .setName(instanceConfigName.toString()) + .setDisplayName("updated custom instance config") + .putLabels("updated", "true").build(); + /** + * The field mask must always be specified; this prevents any future + * fields in [InstanceConfig][google.spanner.admin.instance.v1.InstanceConfig] + * from being erased accidentally by clients that do not know about them. + */ + final UpdateInstanceConfigRequest updateInstanceConfigRequest = + UpdateInstanceConfigRequest.newBuilder() + .setInstanceConfig(instanceConfig) + .setUpdateMask( + FieldMask.newBuilder().addAllPaths(ImmutableList.of("display_name", "labels")) + .build()).build(); + try { + System.out.printf("Waiting for update operation on %s to complete...\n", + instanceConfigName); + InstanceConfig instanceConfigResult = + instanceAdminClient.updateInstanceConfigAsync( + updateInstanceConfigRequest).get(5, TimeUnit.MINUTES); + System.out.printf( + "Updated instance configuration %s with new display name %s\n", + instanceConfigResult.getName(), instanceConfig.getDisplayName()); + } catch (ExecutionException | TimeoutException e) { + System.out.printf( + "Error: Updating instance config %s failed with error message %s\n", + instanceConfig.getName(), e.getMessage()); + e.printStackTrace(); + } catch (InterruptedException e) { + System.out.println( + "Error: Waiting for updateInstanceConfig operation to finish was interrupted"); + } } } } From 87bea00375100f59de9458f32d7aa6bd201f8135 Mon Sep 17 00:00:00 2001 From: Arpan Mishra Date: Thu, 11 Jan 2024 23:48:52 +0530 Subject: [PATCH 25/25] chore: fix lint issues. --- .../spanner/admin/generated/CreateInstanceConfigSample.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java index 258f1aff051..49ce023b24a 100644 --- a/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceConfigSample.java @@ -53,9 +53,9 @@ static void createInstanceConfig( final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId, instanceConfigId); /** - * The replicas for the custom instance configuration must include all the replicas of the base - * configuration, in addition to at least one from the list of optional replicas of the base - * configuration. + * The replicas for the custom instance configuration must include all the replicas of the + * base configuration, in addition to at least one from the list of optional replicas of the + * base configuration. */ final List replicas = Stream.concat(baseConfig.getReplicasList().stream(),