diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/AccountClient.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/AccountClient.java index 28a9ee5d7..cda884530 100755 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/AccountClient.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/AccountClient.java @@ -1131,10 +1131,11 @@ public DatabricksConfig config() { } public WorkspaceClient getWorkspaceClient(Workspace workspace) { - // For unified hosts, reuse the same host and set workspace ID + // For unified hosts, clone config and set workspace ID if (this.config.getHostType() == HostType.UNIFIED) { - this.config.setWorkspaceId(String.valueOf(workspace.getWorkspaceId())); - return new WorkspaceClient(this.config); + DatabricksConfig workspaceConfig = this.config.clone(); + workspaceConfig.setWorkspaceId(String.valueOf(workspace.getWorkspaceId())); + return new WorkspaceClient(workspaceConfig); } // For traditional account hosts, get workspace deployment URL diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/AccountClientTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/AccountClientTest.java index ca20fe5a2..4c7049374 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/AccountClientTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/AccountClientTest.java @@ -72,4 +72,40 @@ public void testGetWorkspaceClientForUnifiedHostType() { assertEquals(HostType.UNIFIED, config.getHostType()); } + + @Test + public void testGetWorkspaceClientForSpogHostDoesNotMutateAccountConfig() { + String spogHost = "https://mycompany.databricks.com"; + DatabricksConfig accountConfig = + new DatabricksConfig() + .setHost(spogHost) + .setExperimentalIsUnifiedHost(true) + .setAccountId("test-account") + .setToken("test-token"); + + AccountClient accountClient = new AccountClient(accountConfig); + + // Get workspace client for first workspace + Workspace workspace1 = new Workspace(); + workspace1.setWorkspaceId(111L); + workspace1.setDeploymentName("ws-1"); + WorkspaceClient wc1 = accountClient.getWorkspaceClient(workspace1); + + // Get workspace client for second workspace + Workspace workspace2 = new Workspace(); + workspace2.setWorkspaceId(222L); + workspace2.setDeploymentName("ws-2"); + WorkspaceClient wc2 = accountClient.getWorkspaceClient(workspace2); + + // Each workspace client should have its own workspace ID + assertEquals("111", wc1.config().getWorkspaceId()); + assertEquals("222", wc2.config().getWorkspaceId()); + + // Account config should not have been mutated + assertNull(accountConfig.getWorkspaceId()); + + // Both should share the same SPOG host + assertEquals(spogHost, wc1.config().getHost()); + assertEquals(spogHost, wc2.config().getHost()); + } }