Skip to content

Commit 01e4b94

Browse files
Handle invalid kernels / kernel launch fails in native notebooks (#13627)
Mac failure is not a test failure, but a VS Code CI download issue, tests passed locally for me.
1 parent eff27a1 commit 01e4b94

File tree

3 files changed

+9
-12
lines changed

3 files changed

+9
-12
lines changed

news/2 Fixes/13409.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Native notebook launch doesn't hang if the kernel does not start, and notifies the user of the failure. Also does not show the first cell as executing until the kernel is actually started and connected.

src/client/datascience/jupyter/kernels/kernel.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
Event,
1414
EventEmitter,
1515
NotebookCell,
16-
NotebookCellRunState,
1716
NotebookDocument,
1817
Uri
1918
} from 'vscode';
@@ -82,8 +81,8 @@ export class Kernel implements IKernel {
8281
private readonly launchTimeout: number,
8382
commandManager: ICommandManager,
8483
interpreterService: IInterpreterService,
85-
errorHandler: IDataScienceErrorHandler,
86-
private readonly contentProvider: INotebookContentProvider,
84+
private readonly errorHandler: IDataScienceErrorHandler,
85+
contentProvider: INotebookContentProvider,
8786
editorProvider: INotebookEditorProvider,
8887
private readonly kernelProvider: IKernelProvider,
8988
private readonly kernelSelectionUsage: IKernelSelectionUsage,
@@ -101,13 +100,6 @@ export class Kernel implements IKernel {
101100
);
102101
}
103102
public async executeCell(cell: NotebookCell): Promise<void> {
104-
// Update cell to running state if cell has any code
105-
if (cell.document.getText().trim().length > 0) {
106-
cell.metadata.runState = NotebookCellRunState.Running;
107-
this.contentProvider.notifyChangesToDocument(cell.notebook);
108-
}
109-
110-
// Then actually start.
111103
await this.start({ disableUI: false, token: this.startCancellation.token });
112104
await this.kernelExecution.executeCell(cell);
113105
}
@@ -146,7 +138,12 @@ export class Kernel implements IKernel {
146138

147139
this._notebookPromise
148140
.then((nb) => (this.kernelExecution.notebook = this.notebook = nb))
149-
.catch((ex) => traceError('failed to create INotebook in kernel', ex));
141+
.catch((ex) => {
142+
traceError('failed to create INotebook in kernel', ex);
143+
this._notebookPromise = undefined;
144+
this.startCancellation.cancel();
145+
this.errorHandler.handleError(ex).ignoreErrors(); // Just a notification, so don't await this
146+
});
150147
await this._notebookPromise;
151148
await this.initializeAfterStart();
152149
}

src/client/datascience/jupyter/kernels/kernelProvider.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ export class KernelProvider implements IKernelProvider {
2929
@inject(IDataScienceErrorHandler) private readonly errorHandler: IDataScienceErrorHandler,
3030
@inject(INotebookContentProvider) private readonly contentProvider: INotebookContentProvider,
3131
@inject(INotebookEditorProvider) private readonly editorProvider: INotebookEditorProvider,
32-
3332
@inject(KernelSelector) private readonly kernelSelectionUsage: IKernelSelectionUsage,
3433
@inject(IApplicationShell) private readonly appShell: IApplicationShell
3534
) {}

0 commit comments

Comments
 (0)