Skip to content

Commit 0cd590e

Browse files
Update metadata url before emitting connection change events (#992)
## Changes This prevents race-condition when we attempt to save environments variables to a file and terminals before the metadata url is actually updated. Should help with avoiding problems like this: #980 ## Tests Manually and existing unit tests Co-authored-by: Kartik Gupta <88345179+kartikgupta-db@users.noreply.github.com>
1 parent c0abaf7 commit 0cd590e

File tree

3 files changed

+22
-52
lines changed

3 files changed

+22
-52
lines changed

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

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {DatabricksWorkspace} from "./DatabricksWorkspace";
2424
import {Loggers} from "../logger";
2525
import {CustomWhenContext} from "../vscode-objs/CustomWhenContext";
2626
import {workspaceConfigs} from "../vscode-objs/WorkspaceConfigs";
27-
import {StateStorage} from "../vscode-objs/StateStorage";
27+
import {MetadataService} from "./auth/MetadataService";
2828

2929
// eslint-disable-next-line @typescript-eslint/naming-convention
3030
const {NamedLogger} = logging;
@@ -43,6 +43,7 @@ export class ConnectionManager {
4343
private _projectConfigFile?: ProjectConfigFile;
4444
private _clusterManager?: ClusterManager;
4545
private _databricksWorkspace?: DatabricksWorkspace;
46+
private _metadataService: MetadataService;
4647

4748
private readonly onDidChangeStateEmitter: EventEmitter<ConnectionState> =
4849
new EventEmitter();
@@ -58,12 +59,16 @@ export class ConnectionManager {
5859
public readonly onDidChangeSyncDestination =
5960
this.onDidChangeSyncDestinationEmitter.event;
6061

61-
public metadataServiceUrl?: string;
62+
constructor(private cli: CliWrapper) {
63+
this._metadataService = new MetadataService(
64+
undefined,
65+
NamedLogger.getOrCreate("Extension")
66+
);
67+
}
6268

63-
constructor(
64-
private cli: CliWrapper,
65-
private stateStorage: StateStorage
66-
) {}
69+
get metadataServiceUrl() {
70+
return this._metadataService.url;
71+
}
6772

6873
get state(): ConnectionState {
6974
return this._state;
@@ -201,6 +206,8 @@ export class ConnectionManager {
201206
this._workspaceClient = workspaceClient;
202207
this._projectConfigFile = projectConfigFile;
203208

209+
await this._metadataService.setApiClient(workspaceClient?.apiClient);
210+
204211
if (projectConfigFile.clusterId) {
205212
await this.attachCluster(projectConfigFile.clusterId, true);
206213
} else {
@@ -525,6 +532,11 @@ export class ConnectionManager {
525532
});
526533
}
527534

535+
async startMetadataService() {
536+
await this._metadataService.listen();
537+
return this._metadataService;
538+
}
539+
528540
async waitForConnect(): Promise<void> {
529541
if (this._state !== "CONNECTED") {
530542
return await new Promise((resolve) => {

packages/databricks-vscode/src/configuration/auth/MetadataServiceManager.ts

Lines changed: 0 additions & 39 deletions
This file was deleted.

packages/databricks-vscode/src/extension.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import {generateBundleSchema} from "./bundle/GenerateBundle";
3636
import {CustomWhenContext} from "./vscode-objs/CustomWhenContext";
3737
import {StateStorage} from "./vscode-objs/StateStorage";
3838
import path from "node:path";
39-
import {MetadataServiceManager} from "./configuration/auth/MetadataServiceManager";
4039
import {FeatureId, FeatureManager} from "./feature-manager/FeatureManager";
4140
import {DbConnectAccessVerifier} from "./language/DbConnectAccessVerifier";
4241
import {MsPythonExtensionWrapper} from "./language/MsPythonExtensionWrapper";
@@ -154,7 +153,7 @@ export async function activate(
154153
);
155154
}
156155
const cli = new CliWrapper(context, cliLogFilePath);
157-
const connectionManager = new ConnectionManager(cli, stateStorage);
156+
const connectionManager = new ConnectionManager(cli);
158157
context.subscriptions.push(
159158
connectionManager.onDidChangeState(async (state) => {
160159
telemetry.setMetadata(
@@ -171,10 +170,9 @@ export async function activate(
171170
}
172171
})
173172
);
174-
const metadataServiceManager = new MetadataServiceManager(
175-
connectionManager
176-
);
177-
await metadataServiceManager.listen();
173+
174+
const metadataService = await connectionManager.startMetadataService();
175+
context.subscriptions.push(metadataService);
178176

179177
const workspaceFsDataProvider = new WorkspaceFsDataProvider(
180178
connectionManager
@@ -187,7 +185,6 @@ export async function activate(
187185
);
188186

189187
context.subscriptions.push(
190-
metadataServiceManager,
191188
window.registerTreeDataProvider(
192189
"workspaceFsView",
193190
workspaceFsDataProvider

0 commit comments

Comments
 (0)