From a21367edf71d90cab6fe39eed19a40e58c9dc454 Mon Sep 17 00:00:00 2001 From: Hector Castejon Diaz Date: Thu, 19 Mar 2026 09:05:47 +0000 Subject: [PATCH 1/2] Fix GetWorkspaceClient to clone config for unified hosts Port of Go SDK #1517. Previously getWorkspaceClient() mutated the AccountClient's own config when setting workspaceId for unified hosts, causing stale state on subsequent calls. Now clones the config instead. Co-authored-by: Isaac --- .../src/main/java/com/databricks/sdk/AccountClient.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 From 74b50109a6258c47cda979a7cd285a4908218a59 Mon Sep 17 00:00:00 2001 From: Hector Castejon Diaz Date: Thu, 19 Mar 2026 09:08:02 +0000 Subject: [PATCH 2/2] Add test for GetWorkspaceClient with SPOG host Port of Go SDK #1518. Verifies that getWorkspaceClient() on a unified (SPOG) host clones the config rather than mutating the AccountClient's config, so multiple calls produce independent WorkspaceClients. Co-authored-by: Isaac --- .../com/databricks/sdk/AccountClientTest.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) 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()); + } }