Skip to content

Commit 88e24c7

Browse files
authored
docs: samples and tests for instance APIs. (#2768)
Adds samples and tests for auto-generated Instance Admin APIs.
1 parent 58f94b2 commit 88e24c7

19 files changed

+755
-39
lines changed

README.md

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ implementation 'com.google.cloud:google-cloud-spanner'
5757
If you are using Gradle without BOM, add this to your dependencies:
5858

5959
```Groovy
60-
implementation 'com.google.cloud:google-cloud-spanner:6.55.0'
60+
implementation 'com.google.cloud:google-cloud-spanner:6.56.0'
6161
```
6262

6363
If you are using SBT, add this to your dependencies:
6464

6565
```Scala
66-
libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.55.0"
66+
libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.56.0"
6767
```
6868
<!-- {x-version-update-end} -->
6969

@@ -331,7 +331,15 @@ Samples are in the [`samples/`](https://github.com/googleapis/java-spanner/tree/
331331
| 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) |
332332
| 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) |
333333
| 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) |
334+
| 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) |
334335
| 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) |
336+
| 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) |
337+
| 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) |
338+
| 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) |
339+
| 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) |
340+
| 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) |
341+
| 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) |
342+
| 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) |
335343

336344

337345

@@ -435,7 +443,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
435443
[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.html
436444
[stability-image]: https://img.shields.io/badge/stability-stable-green
437445
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg
438-
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.55.0
446+
[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.56.0
439447
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
440448
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
441449
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles

samples/install-without-bom/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<groupId>com.google.cloud.samples</groupId>
1616
<artifactId>shared-configuration</artifactId>
1717
<version>1.2.0</version>
18+
<relativePath></relativePath>
1819
</parent>
1920

2021
<properties>
@@ -144,7 +145,7 @@
144145
<systemPropertyVariables>
145146
<spanner.test.instance>java-client-integration-test</spanner.test.instance>
146147
<spanner.test.instance.mr>java-client-mr-integration-test</spanner.test.instance.mr>
147-
<spanner.test.instance.config>nam15</spanner.test.instance.config>
148+
<spanner.test.instance.config>nam11</spanner.test.instance.config>
148149
<spanner.test.key.location>us-east1</spanner.test.key.location>
149150
<spanner.test.key.ring>cmek-test-key-ring</spanner.test.key.ring>
150151
<spanner.test.key.name>cmek-test-key</spanner.test.key.name>

samples/native-image/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<groupId>com.google.cloud.samples</groupId>
1515
<artifactId>shared-configuration</artifactId>
1616
<version>1.2.0</version>
17+
<relativePath></relativePath>
1718
</parent>
1819

1920
<properties>

samples/snapshot/pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<groupId>com.google.cloud.samples</groupId>
1616
<artifactId>shared-configuration</artifactId>
1717
<version>1.2.0</version>
18+
<relativePath></relativePath>
1819
</parent>
1920

2021
<properties>
@@ -143,7 +144,7 @@
143144
<systemPropertyVariables>
144145
<spanner.test.instance>java-client-integration-test</spanner.test.instance>
145146
<spanner.test.instance.mr>java-client-mr-integration-test</spanner.test.instance.mr>
146-
<spanner.test.instance.config>nam15</spanner.test.instance.config>
147+
<spanner.test.instance.config>nam11</spanner.test.instance.config>
147148
<spanner.test.key.location>us-east1</spanner.test.key.location>
148149
<spanner.test.key.ring>cmek-test-key-ring</spanner.test.key.ring>
149150
<spanner.test.key.name>cmek-test-key</spanner.test.key.name>

samples/snippets/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
<systemPropertyVariables>
181181
<spanner.test.instance>java-client-integration-test</spanner.test.instance>
182182
<spanner.test.instance.mr>java-client-mr-integration-test</spanner.test.instance.mr>
183-
<spanner.test.instance.config>nam15</spanner.test.instance.config>
183+
<spanner.test.instance.config>nam11</spanner.test.instance.config>
184184
<spanner.test.key.location>us-east1</spanner.test.key.location>
185185
<spanner.test.key.ring>cmek-test-key-ring</spanner.test.key.ring>
186186
<spanner.test.key.name>cmek-test-key</spanner.test.key.name>

samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateDatabaseWithDefaultLeaderSample.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,7 @@ static void createDatabaseWithDefaultLeader() throws IOException {
3939

4040
static void createDatabaseWithDefaultLeader(String instanceName, String databaseId,
4141
String defaultLeader) throws IOException {
42-
DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create();
43-
44-
try {
42+
try (DatabaseAdminClient databaseAdminClient = DatabaseAdminClient.create()) {
4543
Database createdDatabase =
4644
databaseAdminClient.createDatabaseAsync(
4745
CreateDatabaseRequest.newBuilder()
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
* Copyright 2024 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.example.spanner.admin.generated;
18+
19+
// [START spanner_create_instance_config]
20+
21+
import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient;
22+
import com.google.spanner.admin.instance.v1.CreateInstanceConfigRequest;
23+
import com.google.spanner.admin.instance.v1.InstanceConfig;
24+
import com.google.spanner.admin.instance.v1.InstanceConfigName;
25+
import com.google.spanner.admin.instance.v1.ProjectName;
26+
import com.google.spanner.admin.instance.v1.ReplicaInfo;
27+
import java.io.IOException;
28+
import java.util.List;
29+
import java.util.concurrent.ExecutionException;
30+
import java.util.concurrent.TimeUnit;
31+
import java.util.concurrent.TimeoutException;
32+
import java.util.stream.Collectors;
33+
import java.util.stream.Stream;
34+
35+
class CreateInstanceConfigSample {
36+
37+
static void createInstanceConfig() throws IOException {
38+
// TODO(developer): Replace these variables before running the sample.
39+
String projectId = "my-project";
40+
String baseInstanceConfigId = "nam11";
41+
String instanceConfigId = "custom-instance-config4";
42+
43+
createInstanceConfig(projectId, baseInstanceConfigId, instanceConfigId);
44+
}
45+
46+
static void createInstanceConfig(
47+
String projectId, String baseInstanceConfigId, String instanceConfigId) throws IOException {
48+
try (InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) {
49+
final InstanceConfigName baseInstanceConfigName = InstanceConfigName.of(projectId,
50+
baseInstanceConfigId);
51+
final InstanceConfig baseConfig =
52+
instanceAdminClient.getInstanceConfig(baseInstanceConfigName.toString());
53+
final InstanceConfigName instanceConfigName = InstanceConfigName.of(projectId,
54+
instanceConfigId);
55+
/**
56+
* The replicas for the custom instance configuration must include all the replicas of the
57+
* base configuration, in addition to at least one from the list of optional replicas of the
58+
* base configuration.
59+
*/
60+
final List<ReplicaInfo> replicas =
61+
Stream.concat(baseConfig.getReplicasList().stream(),
62+
baseConfig.getOptionalReplicasList().stream().limit(1)).collect(Collectors.toList());
63+
final InstanceConfig instanceConfig =
64+
InstanceConfig.newBuilder().setName(instanceConfigName.toString())
65+
.setBaseConfig(baseInstanceConfigName.toString())
66+
.setDisplayName("Instance Configuration").addAllReplicas(replicas).build();
67+
final CreateInstanceConfigRequest createInstanceConfigRequest =
68+
CreateInstanceConfigRequest.newBuilder().setParent(ProjectName.of(projectId).toString())
69+
.setInstanceConfigId(instanceConfigId).setInstanceConfig(instanceConfig).build();
70+
try {
71+
System.out.printf("Waiting for create operation for %s to complete...\n",
72+
instanceConfigName);
73+
InstanceConfig instanceConfigResult =
74+
instanceAdminClient.createInstanceConfigAsync(
75+
createInstanceConfigRequest).get(5, TimeUnit.MINUTES);
76+
System.out.printf("Created instance configuration %s\n", instanceConfigResult.getName());
77+
} catch (ExecutionException | TimeoutException e) {
78+
System.out.printf(
79+
"Error: Creating instance configuration %s failed with error message %s\n",
80+
instanceConfig.getName(), e.getMessage());
81+
} catch (InterruptedException e) {
82+
System.out.println(
83+
"Error: Waiting for createInstanceConfig operation to finish was interrupted");
84+
}
85+
}
86+
}
87+
}
88+
// [END spanner_create_instance_config]

samples/snippets/src/main/java/com/example/spanner/admin/generated/CreateInstanceExample.java

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.example.spanner.admin.generated;
1818

1919
//[START spanner_create_instance]
20+
2021
import com.google.cloud.spanner.admin.instance.v1.InstanceAdminClient;
2122
import com.google.spanner.admin.instance.v1.CreateInstanceRequest;
2223
import com.google.spanner.admin.instance.v1.Instance;
@@ -35,35 +36,35 @@ static void createInstance() throws IOException {
3536
}
3637

3738
static void createInstance(String projectId, String instanceId) throws IOException {
38-
InstanceAdminClient instanceAdminClient = InstanceAdminClient.create();
39-
40-
// Set Instance configuration.
41-
int nodeCount = 2;
42-
String displayName = "Descriptive name";
39+
try (InstanceAdminClient instanceAdminClient = InstanceAdminClient.create()) {
40+
// Set Instance configuration.
41+
int nodeCount = 2;
42+
String displayName = "Descriptive name";
4343

44-
// Create an Instance object that will be used to create the instance.
45-
Instance instance =
46-
Instance.newBuilder()
47-
.setDisplayName(displayName)
48-
.setNodeCount(nodeCount)
49-
.setConfig(
50-
InstanceConfigName.of(projectId, "regional-us-central1").toString())
51-
.build();
52-
try {
53-
// Wait for the createInstance operation to finish.
54-
Instance createdInstance = instanceAdminClient.createInstanceAsync(
55-
CreateInstanceRequest.newBuilder()
56-
.setParent(ProjectName.of(projectId).toString())
57-
.setInstanceId(instanceId)
58-
.setInstance(instance)
59-
.build()).get();
60-
System.out.printf("Instance %s was successfully created%n", createdInstance.getName());
61-
} catch (ExecutionException e) {
62-
System.out.printf(
63-
"Error: Creating instance %s failed with error message %s%n",
64-
instance.getName(), e.getMessage());
65-
} catch (InterruptedException e) {
66-
System.out.println("Error: Waiting for createInstance operation to finish was interrupted");
44+
// Create an Instance object that will be used to create the instance.
45+
Instance instance =
46+
Instance.newBuilder()
47+
.setDisplayName(displayName)
48+
.setNodeCount(nodeCount)
49+
.setConfig(
50+
InstanceConfigName.of(projectId, "regional-us-central1").toString())
51+
.build();
52+
try {
53+
// Wait for the createInstance operation to finish.
54+
Instance createdInstance = instanceAdminClient.createInstanceAsync(
55+
CreateInstanceRequest.newBuilder()
56+
.setParent(ProjectName.of(projectId).toString())
57+
.setInstanceId(instanceId)
58+
.setInstance(instance)
59+
.build()).get();
60+
System.out.printf("Instance %s was successfully created%n", createdInstance.getName());
61+
} catch (ExecutionException e) {
62+
System.out.printf(
63+
"Error: Creating instance %s failed with error message %s%n",
64+
instance.getName(), e.getMessage());
65+
} catch (InterruptedException e) {
66+
System.out.println("Error: Waiting for createInstance operation to finish was interrupted");
67+
}
6768
}
6869
}
6970
}

0 commit comments

Comments
 (0)