diff --git a/src/sql/workbench/api/browser/mainThreadNotebook.ts b/src/sql/workbench/api/browser/mainThreadNotebook.ts index b3e3275ce9..9aa363cafb 100644 --- a/src/sql/workbench/api/browser/mainThreadNotebook.ts +++ b/src/sql/workbench/api/browser/mainThreadNotebook.ts @@ -235,7 +235,9 @@ class SessionManagerWrapper implements azdata.nb.SessionManager { private async doStartNew(options: azdata.nb.ISessionOptions): Promise { let sessionDetails = await this._proxy.ext.$startNewSession(this.managerHandle, options); - return new SessionWrapper(this._proxy, sessionDetails); + const sessionManager = new SessionWrapper(this._proxy, sessionDetails); + await sessionManager.initialize(); + return sessionManager; } shutdown(id: string): Thenable { @@ -257,34 +259,39 @@ class SessionManagerWrapper implements azdata.nb.SessionManager { class SessionWrapper implements azdata.nb.ISession { private _kernel: KernelWrapper; - constructor(private _proxy: Proxies, private sessionDetails: INotebookSessionDetails) { - if (sessionDetails && sessionDetails.kernelDetails) { - this._kernel = new KernelWrapper(_proxy, sessionDetails.kernelDetails); + constructor(private _proxy: Proxies, private _sessionDetails: INotebookSessionDetails) { + + } + + public async initialize(): Promise { + if (this._sessionDetails && this._sessionDetails.kernelDetails) { + this._kernel = new KernelWrapper(this._proxy, this._sessionDetails.kernelDetails); + return this._kernel.initialize(); } } get canChangeKernels(): boolean { - return this.sessionDetails.canChangeKernels; + return this._sessionDetails.canChangeKernels; } get id(): string { - return this.sessionDetails.id; + return this._sessionDetails.id; } get path(): string { - return this.sessionDetails.path; + return this._sessionDetails.path; } get name(): string { - return this.sessionDetails.name; + return this._sessionDetails.name; } get type(): string { - return this.sessionDetails.type; + return this._sessionDetails.type; } get status(): azdata.nb.KernelStatus { - return this.sessionDetails.status as azdata.nb.KernelStatus; + return this._sessionDetails.status as azdata.nb.KernelStatus; } get kernel(): azdata.nb.IKernel { @@ -307,17 +314,18 @@ class SessionWrapper implements azdata.nb.ISession { } private async doChangeKernel(kernelInfo: azdata.nb.IKernelSpec): Promise { - let kernelDetails = await this._proxy.ext.$changeKernel(this.sessionDetails.sessionId, kernelInfo); + let kernelDetails = await this._proxy.ext.$changeKernel(this._sessionDetails.sessionId, kernelInfo); this._kernel = new KernelWrapper(this._proxy, kernelDetails); + await this._kernel.initialize(); return this._kernel; } private async doConfigureKernel(kernelInfo: azdata.nb.IKernelSpec): Promise { - await this._proxy.ext.$configureKernel(this.sessionDetails.sessionId, kernelInfo); + await this._proxy.ext.$configureKernel(this._sessionDetails.sessionId, kernelInfo); } private async doConfigureConnection(connection: azdata.IConnectionProfile): Promise { - await this._proxy.ext.$configureConnection(this.sessionDetails.sessionId, connection); + await this._proxy.ext.$configureConnection(this._sessionDetails.sessionId, connection); } } @@ -325,13 +333,12 @@ class KernelWrapper implements azdata.nb.IKernel { private _isReady: boolean = false; private _ready = new Deferred(); private _info: azdata.nb.IInfoReply; - constructor(private _proxy: Proxies, private kernelDetails: INotebookKernelDetails) { - this.initialize(kernelDetails); + constructor(private readonly _proxy: Proxies, private readonly kernelDetails: INotebookKernelDetails) { } - private async initialize(kernelDetails: INotebookKernelDetails): Promise { + public async initialize(): Promise { try { - this._info = await this._proxy.ext.$getKernelReadyStatus(kernelDetails.kernelId); + this._info = await this._proxy.ext.$getKernelReadyStatus(this.kernelDetails.kernelId); this._isReady = true; this._ready.resolve(); } catch (error) { diff --git a/src/sql/workbench/contrib/jobManagement/browser/notebooksView.component.ts b/src/sql/workbench/contrib/jobManagement/browser/notebooksView.component.ts index a57b45ce2a..30d2dbf7e0 100644 --- a/src/sql/workbench/contrib/jobManagement/browser/notebooksView.component.ts +++ b/src/sql/workbench/contrib/jobManagement/browser/notebooksView.component.ts @@ -34,6 +34,7 @@ import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys'; import { attachButtonStyler } from 'sql/platform/theme/common/styler'; import { Taskbar } from 'sql/base/browser/ui/taskbar/taskbar'; import { find, fill } from 'vs/base/common/arrays'; +import { onUnexpectedError } from 'vs/base/common/errors'; export const NOTEBOOKSVIEW_SELECTOR: string = 'notebooksview-component'; @@ -407,14 +408,14 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit, break; } } - this.openLastNRun(targetNotebook, barId, 5); + this.openLastNRun(targetNotebook, barId, 5).catch(onUnexpectedError); e.stopPropagation(); }); // cache the dataview for future use this._notebookCacheObject.dataView = this.dataView; this.filterValueMap['start'] = [[], this.dataView.getItems()]; - this.loadJobHistories(); + this.loadJobHistories().catch(onUnexpectedError); } private highlightErrorRows(e) { @@ -582,7 +583,7 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit, this.rowDetail.applyTemplateNewLineHeight(item, true); } - private async loadJobHistories() { + private async loadJobHistories(): Promise { if (this.notebooks) { let ownerUri: string = this._commonService.connectionManagementService.connectionInfo.ownerUri; let separatedJobs = this.separateFailingJobs(); @@ -590,7 +591,7 @@ export class NotebooksViewComponent extends JobManagementView implements OnInit, // so they can be expanded quicker let failing = separatedJobs[0]; let passing = separatedJobs[1]; - Promise.all([this.curateJobHistory(failing, ownerUri), this.curateJobHistory(passing, ownerUri)]); + await Promise.all([this.curateJobHistory(failing, ownerUri), this.curateJobHistory(passing, ownerUri)]); } }