From 0caeea9e5370b59c6f1f652fddd1de1846293e77 Mon Sep 17 00:00:00 2001 From: Sakthivel Subramanian Date: Wed, 29 Oct 2025 15:03:29 +0530 Subject: [PATCH] fix: Remove URL encoding in project name --- .../spanner/InstanceAdminClientImpl.java | 2 +- .../spanner/InstanceAdminClientImplTest.java | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) 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 46780e55ba2..4cceaffa309 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 dc80eb39fa1..a78982e8c35 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