From 373828d76f6f4e32f25cd0c21ef25c0a67c58bf1 Mon Sep 17 00:00:00 2001 From: Charles Gagnon Date: Wed, 18 Sep 2019 11:41:37 -0700 Subject: [PATCH] Have MSSQL extension wait for SqlToolsService ready before finishing activation (#7087) * Have mssql activate wait for service to be ready before returning * Change to using deferred promise * Await on server ready * Finish removing old code * More cleanup * Go back to exposed promise API * Make property readonly * Add missing file * Add back in deleted stuff * Go back to awaiting --- extensions/mssql/src/main.ts | 2 +- extensions/mssql/src/mssqlApiFactory.ts | 2 +- extensions/mssql/src/sqlToolsServer.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/extensions/mssql/src/main.ts b/extensions/mssql/src/main.ts index 14776320c8..a0212e0601 100644 --- a/extensions/mssql/src/main.ts +++ b/extensions/mssql/src/main.ts @@ -71,7 +71,7 @@ export async function activate(context: vscode.ExtensionContext): PromiseoeProvider.findSqlClusterNodeByContext(explorerContext); } }; - }, + } }; } diff --git a/extensions/mssql/src/sqlToolsServer.ts b/extensions/mssql/src/sqlToolsServer.ts index e5a6f0d988..f29ca15eb3 100644 --- a/extensions/mssql/src/sqlToolsServer.ts +++ b/extensions/mssql/src/sqlToolsServer.ts @@ -40,7 +40,7 @@ export class SqlToolsServer { let clientOptions = getClientOptions(context); this.client = new SqlOpsDataClient(Constants.serviceName, serverOptions, clientOptions); const processStart = Date.now(); - this.client.onReady().then(() => { + const clientReadyPromise = this.client.onReady().then(() => { const processEnd = Date.now(); statusView.text = localize('serviceStartedStatusMsg', "{0} Started", Constants.serviceName); setTimeout(() => { @@ -59,7 +59,7 @@ export class SqlToolsServer { statusView.show(); statusView.text = localize('startingServiceStatusMsg', "Starting {0}", Constants.serviceName); this.client.start(); - await this.activateFeatures(context); + await Promise.all([this.activateFeatures(context), clientReadyPromise]); return this.client; } catch (e) { Telemetry.sendTelemetryEvent('ServiceInitializingFailed');