Skip to content

Commit 3511e3e

Browse files
authored
Always show serverless compute option in the cluster dropwodn (#1573)
## Changes Serverless detection for a workspace is not full proof. Instead of having false negatives, we show serverless option for everyone. Jobs and dbconnect runs already show clear errors if serverless is not supported. ## Tests Existing integ tests
1 parent ef9e923 commit 3511e3e

File tree

5 files changed

+17
-51
lines changed

5 files changed

+17
-51
lines changed

packages/databricks-vscode/src/configuration/ConnectionCommands.ts

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,11 @@ export class ConnectionCommands implements Disposable {
138138
quickPick.busy = true;
139139
quickPick.canSelectMany = false;
140140
const items: QuickPickItem[] = [
141+
{
142+
label: "$(cloud) Serverless",
143+
detail: `Run files as Workflows or use Databricks Connect without a dedicated cluster`,
144+
alwaysShow: false,
145+
},
141146
{
142147
label: "$(repo-create) Create New Cluster",
143148
detail: `Open Databricks in the browser and create a new cluster`,
@@ -148,15 +153,6 @@ export class ConnectionCommands implements Disposable {
148153
kind: QuickPickItemKind.Separator,
149154
},
150155
];
151-
if (
152-
this.connectionManager.databricksWorkspace?.isServerlessEnabled
153-
) {
154-
items.unshift({
155-
label: "$(cloud) Serverless",
156-
detail: `Run files as Workflows or use Databricks Connect without a dedicated cluster`,
157-
alwaysShow: false,
158-
});
159-
}
160156
quickPick.items = items;
161157

162158
this.clusterModel.refresh();

packages/databricks-vscode/src/configuration/ConnectionManager.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,7 @@ export class ConnectionManager implements Disposable {
156156
const serverless = await this.configModel.get("serverless");
157157
const computeId = this.apiClient?.config.serverlessComputeId;
158158
const autoEnable =
159-
serverless === undefined &&
160-
!this.cluster &&
161-
computeId === "auto" &&
162-
this.databricksWorkspace?.isServerlessEnabled;
159+
serverless === undefined && !this.cluster && computeId === "auto";
163160
if (serverless || autoEnable) {
164161
await this.enableServerless();
165162
} else {

packages/databricks-vscode/src/configuration/DatabricksWorkspace.test.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ describe(__filename, () => {
1616
const wsConf = {
1717
enableProjectTypeInWorkspace: "true",
1818
enableWorkspaceFilesystem: "dbr11.0+",
19-
enableServerless: true,
2019
} as const;
2120
const authProvider = new ProfileAuthProvider(
2221
new URL("https://fabian.databricks.com"),
@@ -35,7 +34,6 @@ describe(__filename, () => {
3534
assert.equal(dbWorkspace.id, "workspace-id");
3635
assert(dbWorkspace.isFilesInReposEnabled);
3736
assert(dbWorkspace.isFilesInReposEnabled);
38-
assert(dbWorkspace.isServerlessEnabled);
3937

4038
assert(
4139
dbWorkspace.supportFilesInReposForCluster({

packages/databricks-vscode/src/configuration/DatabricksWorkspace.ts

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,12 @@ import {Loggers} from "../logger";
66
import {AuthProvider} from "./auth/AuthProvider";
77
import {RemoteUri} from "../sync/SyncDestination";
88

9-
type ServerlessEnablementResponse = {
10-
setting?: {
11-
value?: {
12-
// eslint-disable-next-line @typescript-eslint/naming-convention
13-
serverless_jobs_notebooks_workspace_enable_val?: {
14-
value: string;
15-
};
16-
};
17-
};
18-
};
19-
209
export class DatabricksWorkspace {
2110
constructor(
2211
public readonly id: string,
2312
private _authProvider: AuthProvider,
2413
private me: iam.User,
25-
private wsConf: WorkspaceConfProps & {enableServerless?: boolean}
14+
private wsConf: WorkspaceConfProps
2615
) {}
2716

2817
/**
@@ -68,10 +57,6 @@ export class DatabricksWorkspace {
6857
return this.wsConf.enableWorkspaceFilesystem !== "false";
6958
}
7059

71-
get isServerlessEnabled(): boolean {
72-
return this.wsConf.enableServerless === true;
73-
}
74-
7560
supportFilesInReposForCluster(cluster: Cluster): boolean {
7661
if (!this.isReposEnabled || !this.isFilesInReposEnabled) {
7762
return false;
@@ -110,7 +95,7 @@ export class DatabricksWorkspace {
11095
const id = (me as any)["x-databricks-org-id"] as string;
11196

11297
const wsConfApi = new WorkspaceConf(client.apiClient);
113-
let state: WorkspaceConfProps & {enableServerless?: boolean} = {
98+
let state: WorkspaceConfProps = {
11499
enableProjectTypeInWorkspace: "true",
115100
enableWorkspaceFilesystem: "true",
116101
};
@@ -123,20 +108,6 @@ export class DatabricksWorkspace {
123108
} catch (e) {
124109
ctx?.logger?.error("Can't fetch workspace confs", e);
125110
}
126-
try {
127-
const serverlessEnablement = (await client.apiClient.request(
128-
`/api/2.0/settings-api/workspace/${id}/serverless_jobs_ws_nb_enable`,
129-
"GET"
130-
)) as ServerlessEnablementResponse;
131-
const enableServerless =
132-
serverlessEnablement?.setting?.value
133-
?.serverless_jobs_notebooks_workspace_enable_val?.value ===
134-
"ENABLED";
135-
state = {...state, enableServerless};
136-
} catch (e) {
137-
ctx?.logger?.error("Can't detect serverless support", e);
138-
}
139-
140111
return new DatabricksWorkspace(id, authProvider, me, state);
141112
}
142113
}

packages/databricks-vscode/src/language/EnvironmentDependenciesVerifier.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,12 +142,16 @@ export class EnvironmentDependenciesVerifier extends MultiStepAccessVerifier {
142142
);
143143
}
144144
} catch (e: unknown) {
145-
if (e instanceof Error) {
146-
const title = "Failed to check workspace permissions";
147-
this.logger.error(title, e);
148-
window.showErrorMessage(`${title}: "${e.message}".`);
149-
return this.rejectStep("checkWorkspaceHasUc", title, e.message);
145+
let title = "Failed to check workspace permissions";
146+
this.logger.error(title, e);
147+
let message = e instanceof Error ? e.message : (e as string) || "";
148+
if (message.includes("METASTORE_DOES_NOT_EXIST")) {
149+
title = "The workspace should have Unity Catalog enabled";
150+
message = "No catalogues with read permission were found";
151+
} else {
152+
window.showErrorMessage(`${title}: "${message}".`);
150153
}
154+
return this.rejectStep("checkWorkspaceHasUc", title, message);
151155
}
152156
return this.acceptStep("checkWorkspaceHasUc");
153157
}

0 commit comments

Comments
 (0)