diff --git a/src/sql/parts/notebook/models/notebookModel.ts b/src/sql/parts/notebook/models/notebookModel.ts index d9dd868cd1..d4a5df5bed 100644 --- a/src/sql/parts/notebook/models/notebookModel.ts +++ b/src/sql/parts/notebook/models/notebookModel.ts @@ -427,6 +427,11 @@ export class NotebookModel extends Disposable implements INotebookModel { public doChangeKernel(kernelSpec: nb.IKernelSpec): Promise { this.setProviderIdForKernel(kernelSpec); + // Ensure that the kernel we try to switch to is a valid kernel; if not, use the default + let kernelSpecs = this.getKernelSpecs(); + if (kernelSpecs && kernelSpecs.length > 0 && kernelSpecs.findIndex(k => k.name === kernelSpec.name) < 0) { + kernelSpec = kernelSpecs.find(spec => spec.name === this.notebookManager.sessionManager.specs.defaultKernel); + } if (this._activeClientSession && this._activeClientSession.isReady) { return this._activeClientSession.changeKernel(kernelSpec) .then((kernel) => { @@ -673,13 +678,23 @@ export class NotebookModel extends Disposable implements INotebookModel { // If no SessionManager exists, utilize passed in StandardKernels to see if we can intelligently set _providerId if (!sessionManagerFound) { let provider = this._kernelDisplayNameToNotebookProviderIds.get(kernelSpec.display_name); - if (provider) { + if (provider && provider !== this._providerId) { this._providerId = provider; this._onProviderIdChanged.fire(this._providerId); } } } } + + // Get kernel specs from current sessionManager + private getKernelSpecs(): nb.IKernelSpec[] { + if (this.notebookManager && this.notebookManager.sessionManager && this.notebookManager.sessionManager.specs && + this.notebookManager.sessionManager.specs.kernels) { + return this.notebookManager.sessionManager.specs.kernels; + } + return []; + } + /** * Serialize the model to JSON. */