diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java index 46780e55ba..4cceaffa30 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java @@ -53,7 +53,7 @@ protected com.google.iam.v1.Policy toPb(Policy policy) { } private static final PathTemplate PROJECT_NAME_TEMPLATE = - PathTemplate.create("projects/{project}"); + PathTemplate.createWithoutUrlEncoding("projects/{project}"); private final DatabaseAdminClient dbClient; private final String projectId; private final SpannerRpc rpc; diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java index dc80eb39fa..a78982e8c3 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java @@ -296,6 +296,39 @@ public void createInstance() throws Exception { assertThat(op.get().getId().getName()).isEqualTo(INSTANCE_NAME); } + @Test + public void createInstanceWithOrgNameInProjectId() throws Exception { + String projectIdWithOrg = "my-org:my-project"; + String instanceNameWithOrg = "projects/my-org:my-project/instances/my-instance"; + String configNameWithOrg = "projects/my-org:my-project/instanceConfigs/my-config"; + + InstanceAdminClient universeClient = + new InstanceAdminClientImpl(projectIdWithOrg, rpc, dbClient); + com.google.spanner.admin.instance.v1.Instance instance = + com.google.spanner.admin.instance.v1.Instance.newBuilder() + .setConfig(configNameWithOrg) + .setName(instanceNameWithOrg) + .setNodeCount(1) + .setProcessingUnits(0) + .setEdition(com.google.spanner.admin.instance.v1.Instance.Edition.ENTERPRISE_PLUS) + .build(); + OperationFuture + rawOperationFuture = + OperationFutureUtil.immediateOperationFuture( + "createInstance", instance, CreateInstanceMetadata.getDefaultInstance()); + when(rpc.createInstance("projects/" + projectIdWithOrg, INSTANCE_ID, instance)) + .thenReturn(rawOperationFuture); + OperationFuture op = + universeClient.createInstance( + InstanceInfo.newBuilder(InstanceId.of(projectIdWithOrg, INSTANCE_ID)) + .setInstanceConfigId(InstanceConfigId.of(projectIdWithOrg, CONFIG_ID)) + .setEdition(com.google.spanner.admin.instance.v1.Instance.Edition.ENTERPRISE_PLUS) + .setNodeCount(1) + .build()); + assertThat(op.isDone()).isTrue(); + assertThat(op.get().getId().getName()).isEqualTo(instanceNameWithOrg); + } + @Test public void testCreateInstanceWithProcessingUnits() throws Exception { OperationFuture