Skip to content

Commit 328e300

Browse files
committed
Update hand-written sources to use X-Databricks-Workspace-Id header
Covers the sources the Java SDK generator does not touch: * Deprecated SCIM v1 impls (GroupsImpl, ServicePrincipalsImpl, UsersImpl) retain a codegen marker but are maintained by hand. * SharesExtImpl, the hand-written extension for `/api/2.1/unity-catalog/shares`. * The X-Databricks-Org-Id literal in the UnifiedHostWorkspaceIT comment. * DatabricksConfig.workspaceId Javadoc widened to note the value accepts either a classic numeric workspace ID or another workspace identifier format that the server understands. * NEXT_CHANGELOG.md entry under Internal Changes. Signed-off-by: Divyansh Vijayvergia <divyansh.vijayvergia@databricks.com>
1 parent 295ef1d commit 328e300

7 files changed

Lines changed: 30 additions & 25 deletions

File tree

NEXT_CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
### Documentation
1414

1515
### Internal Changes
16+
* Switch workspace addressing header on workspace-scoped API calls from `X-Databricks-Org-Id` to `X-Databricks-Workspace-Id`. The value continues to come from the `DATABRICKS_WORKSPACE_ID` environment variable / `DatabricksConfig.setWorkspaceId()` setter, and now accepts either a classic numeric workspace ID or another workspace identifier format (server disambiguates). Mirrors [databricks/databricks-sdk-go#1688](https://github.com/databricks/databricks-sdk-go/pull/1688).
1617

1718
### API Changes
1819
* Add `revert()` method for `workspaceClient.lakeview()` service.

databricks-sdk-java/src/main/java/com/databricks/sdk/core/DatabricksConfig.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,11 @@ public class DatabricksConfig {
3333
@ConfigAttribute(env = "DATABRICKS_ACCOUNT_ID")
3434
private String accountId;
3535

36-
/** Workspace ID for unified host operations. */
36+
/**
37+
* Workspace identifier sent on workspace-scoped API calls to unified hosts. Accepts either a
38+
* classic numeric workspace ID or another workspace identifier format that the server understands
39+
* (server disambiguates).
40+
*/
3741
@ConfigAttribute(env = "DATABRICKS_WORKSPACE_ID")
3842
private String workspaceId;
3943

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/GroupsImpl.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public Group create(Group request) {
2525
req.withHeader("Accept", "application/json");
2626
req.withHeader("Content-Type", "application/json");
2727
if (apiClient.workspaceId() != null) {
28-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
28+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
2929
}
3030
return apiClient.execute(req, Group.class);
3131
} catch (IOException e) {
@@ -40,7 +40,7 @@ public void delete(DeleteGroupRequest request) {
4040
Request req = new Request("DELETE", path);
4141
ApiClient.setQuery(req, request);
4242
if (apiClient.workspaceId() != null) {
43-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
43+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
4444
}
4545
apiClient.execute(req, Void.class);
4646
} catch (IOException e) {
@@ -56,7 +56,7 @@ public Group get(GetGroupRequest request) {
5656
ApiClient.setQuery(req, request);
5757
req.withHeader("Accept", "application/json");
5858
if (apiClient.workspaceId() != null) {
59-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
59+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
6060
}
6161
return apiClient.execute(req, Group.class);
6262
} catch (IOException e) {
@@ -72,7 +72,7 @@ public ListGroupsResponse list(ListGroupsRequest request) {
7272
ApiClient.setQuery(req, request);
7373
req.withHeader("Accept", "application/json");
7474
if (apiClient.workspaceId() != null) {
75-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
75+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
7676
}
7777
return apiClient.execute(req, ListGroupsResponse.class);
7878
} catch (IOException e) {
@@ -88,7 +88,7 @@ public void patch(PartialUpdate request) {
8888
ApiClient.setQuery(req, request);
8989
req.withHeader("Content-Type", "application/json");
9090
if (apiClient.workspaceId() != null) {
91-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
91+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
9292
}
9393
apiClient.execute(req, Void.class);
9494
} catch (IOException e) {
@@ -104,7 +104,7 @@ public void update(Group request) {
104104
ApiClient.setQuery(req, request);
105105
req.withHeader("Content-Type", "application/json");
106106
if (apiClient.workspaceId() != null) {
107-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
107+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
108108
}
109109
apiClient.execute(req, Void.class);
110110
} catch (IOException e) {

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/ServicePrincipalsImpl.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public ServicePrincipal create(ServicePrincipal request) {
2525
req.withHeader("Accept", "application/json");
2626
req.withHeader("Content-Type", "application/json");
2727
if (apiClient.workspaceId() != null) {
28-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
28+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
2929
}
3030
return apiClient.execute(req, ServicePrincipal.class);
3131
} catch (IOException e) {
@@ -40,7 +40,7 @@ public void delete(DeleteServicePrincipalRequest request) {
4040
Request req = new Request("DELETE", path);
4141
ApiClient.setQuery(req, request);
4242
if (apiClient.workspaceId() != null) {
43-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
43+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
4444
}
4545
apiClient.execute(req, Void.class);
4646
} catch (IOException e) {
@@ -56,7 +56,7 @@ public ServicePrincipal get(GetServicePrincipalRequest request) {
5656
ApiClient.setQuery(req, request);
5757
req.withHeader("Accept", "application/json");
5858
if (apiClient.workspaceId() != null) {
59-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
59+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
6060
}
6161
return apiClient.execute(req, ServicePrincipal.class);
6262
} catch (IOException e) {
@@ -72,7 +72,7 @@ public ListServicePrincipalResponse list(ListServicePrincipalsRequest request) {
7272
ApiClient.setQuery(req, request);
7373
req.withHeader("Accept", "application/json");
7474
if (apiClient.workspaceId() != null) {
75-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
75+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
7676
}
7777
return apiClient.execute(req, ListServicePrincipalResponse.class);
7878
} catch (IOException e) {
@@ -88,7 +88,7 @@ public void patch(PartialUpdate request) {
8888
ApiClient.setQuery(req, request);
8989
req.withHeader("Content-Type", "application/json");
9090
if (apiClient.workspaceId() != null) {
91-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
91+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
9292
}
9393
apiClient.execute(req, Void.class);
9494
} catch (IOException e) {
@@ -104,7 +104,7 @@ public void update(ServicePrincipal request) {
104104
ApiClient.setQuery(req, request);
105105
req.withHeader("Content-Type", "application/json");
106106
if (apiClient.workspaceId() != null) {
107-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
107+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
108108
}
109109
apiClient.execute(req, Void.class);
110110
} catch (IOException e) {

databricks-sdk-java/src/main/java/com/databricks/sdk/service/iam/UsersImpl.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public User create(User request) {
2525
req.withHeader("Accept", "application/json");
2626
req.withHeader("Content-Type", "application/json");
2727
if (apiClient.workspaceId() != null) {
28-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
28+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
2929
}
3030
return apiClient.execute(req, User.class);
3131
} catch (IOException e) {
@@ -40,7 +40,7 @@ public void delete(DeleteUserRequest request) {
4040
Request req = new Request("DELETE", path);
4141
ApiClient.setQuery(req, request);
4242
if (apiClient.workspaceId() != null) {
43-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
43+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
4444
}
4545
apiClient.execute(req, Void.class);
4646
} catch (IOException e) {
@@ -56,7 +56,7 @@ public User get(GetUserRequest request) {
5656
ApiClient.setQuery(req, request);
5757
req.withHeader("Accept", "application/json");
5858
if (apiClient.workspaceId() != null) {
59-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
59+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
6060
}
6161
return apiClient.execute(req, User.class);
6262
} catch (IOException e) {
@@ -71,7 +71,7 @@ public GetPasswordPermissionLevelsResponse getPermissionLevels() {
7171
Request req = new Request("GET", path);
7272
req.withHeader("Accept", "application/json");
7373
if (apiClient.workspaceId() != null) {
74-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
74+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
7575
}
7676
return apiClient.execute(req, GetPasswordPermissionLevelsResponse.class);
7777
} catch (IOException e) {
@@ -86,7 +86,7 @@ public PasswordPermissions getPermissions() {
8686
Request req = new Request("GET", path);
8787
req.withHeader("Accept", "application/json");
8888
if (apiClient.workspaceId() != null) {
89-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
89+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
9090
}
9191
return apiClient.execute(req, PasswordPermissions.class);
9292
} catch (IOException e) {
@@ -102,7 +102,7 @@ public ListUsersResponse list(ListUsersRequest request) {
102102
ApiClient.setQuery(req, request);
103103
req.withHeader("Accept", "application/json");
104104
if (apiClient.workspaceId() != null) {
105-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
105+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
106106
}
107107
return apiClient.execute(req, ListUsersResponse.class);
108108
} catch (IOException e) {
@@ -118,7 +118,7 @@ public void patch(PartialUpdate request) {
118118
ApiClient.setQuery(req, request);
119119
req.withHeader("Content-Type", "application/json");
120120
if (apiClient.workspaceId() != null) {
121-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
121+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
122122
}
123123
apiClient.execute(req, Void.class);
124124
} catch (IOException e) {
@@ -135,7 +135,7 @@ public PasswordPermissions setPermissions(PasswordPermissionsRequest request) {
135135
req.withHeader("Accept", "application/json");
136136
req.withHeader("Content-Type", "application/json");
137137
if (apiClient.workspaceId() != null) {
138-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
138+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
139139
}
140140
return apiClient.execute(req, PasswordPermissions.class);
141141
} catch (IOException e) {
@@ -151,7 +151,7 @@ public void update(User request) {
151151
ApiClient.setQuery(req, request);
152152
req.withHeader("Content-Type", "application/json");
153153
if (apiClient.workspaceId() != null) {
154-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
154+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
155155
}
156156
apiClient.execute(req, Void.class);
157157
} catch (IOException e) {
@@ -168,7 +168,7 @@ public PasswordPermissions updatePermissions(PasswordPermissionsRequest request)
168168
req.withHeader("Accept", "application/json");
169169
req.withHeader("Content-Type", "application/json");
170170
if (apiClient.workspaceId() != null) {
171-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
171+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
172172
}
173173
return apiClient.execute(req, PasswordPermissions.class);
174174
} catch (IOException e) {

databricks-sdk-java/src/main/java/com/databricks/sdk/service/sharing/SharesExtImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public ListSharesResponse list(ListSharesRequest request) {
2020
ApiClient.setQuery(req, request);
2121
req.withHeader("Accept", "application/json");
2222
if (apiClient.workspaceId() != null) {
23-
req.withHeader("X-Databricks-Org-Id", apiClient.workspaceId());
23+
req.withHeader("X-Databricks-Workspace-Id", apiClient.workspaceId());
2424
}
2525
return apiClient.execute(req, ListSharesResponse.class);
2626
} catch (IOException e) {

databricks-sdk-java/src/test/java/com/databricks/sdk/integration/UnifiedHostWorkspaceIT.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class UnifiedHostWorkspaceIT {
2222
// google-credentials uses a GCP ID token with target_audience=cfg.host.
2323
// On the unified host this produces the same token for both account and workspace
2424
// requests (identical OIDC exchange, identical audience). Account-level APIs accept
25-
// this token, but workspace-level APIs return 401. The X-Databricks-Org-Id header
25+
// this token, but workspace-level APIs return 401. The X-Databricks-Workspace-Id header
2626
// is set correctly. This appears to be a server-side limitation on unified hosts.
2727
@Test
2828
@DisabledIfEnvironmentVariable(named = "CLOUD_PROVIDER", matches = "GCP")

0 commit comments

Comments
 (0)