Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ All notable changes to the Databricks Notebook Studio extension will be document
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.4.4] - 2026-03-03

### Fixed
- **Cell execution timeout now respects VS Code configuration**: The `databricks-notebook.pythonExecutionTimeout` setting was defined but never applied — all cells silently used a hardcoded 60-second limit regardless of the configured value
- Default execution timeout raised from 60 seconds to **180 seconds (3 minutes)** to better accommodate long-running Databricks serverless SQL queries

## [0.4.3] - 2026-01-22

### Added
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "databricks-notebook-studio",
"displayName": "Databricks Notebook Studio",
"description": "Visualize Databricks .py notebooks with rich DataFrame display, interactive tables, column sorting/resizing, and multi-profile authentication",
"version": "0.4.3",
"version": "0.4.4",
"license": "MIT",
"type": "commonjs",
"publisher": "databricks-notebook-studio",
Expand Down Expand Up @@ -139,8 +139,8 @@
},
"databricks-notebook.pythonExecutionTimeout": {
"type": "number",
"default": 100000,
"description": "Timeout for Python cell execution in milliseconds"
"default": 180000,
"description": "Timeout for Python cell execution in milliseconds (default: 180000ms / 3 minutes)"
},
"databricks-notebook.kernelStartupTimeout": {
"type": "number",
Expand Down
2 changes: 1 addition & 1 deletion src/constants/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const ENVIRONMENT_REFRESH_DELAY_MS = 500;
export const KERNEL_STARTUP_TIMEOUT_MS = 30000;

/** Default execution timeout (ms) */
export const EXECUTION_TIMEOUT_MS = 60000;
export const EXECUTION_TIMEOUT_MS = 180000;

/** Default timeout for short operations like ping/reset (ms) */
export const SHORT_OPERATION_TIMEOUT_MS = 5000;
Expand Down
3 changes: 2 additions & 1 deletion src/kernels/pythonKernelController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import {
} from '../utils/codeTransform';
import { extractErrorMessage } from '../utils/errorHandler';
import { showErrorNotification, showInfoMessage } from '../utils/notifications';
import { getExecutionTimeout } from './utils';

/**
* NotebookController for a specific Python interpreter
Expand Down Expand Up @@ -236,7 +237,7 @@ export class PythonKernelController implements vscode.Disposable {

// Execute the code
this._isExecuting = true;
const result = await this._executor.execute(executableCode);
const result = await this._executor.execute(executableCode, getExecutionTimeout());
this._isExecuting = false;

// Check if interrupted (KeyboardInterrupt)
Expand Down
10 changes: 10 additions & 0 deletions src/kernels/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,16 @@ export function getKernelStartupTimeout(defaultTimeout: number): number {
.get<number>('kernelStartupTimeout', defaultTimeout);
}

/**
* Get cell execution timeout from configuration
* @returns Timeout in milliseconds
*/
export function getExecutionTimeout(): number {
return vscode.workspace
.getConfiguration('databricks-notebook')
.get<number>('pythonExecutionTimeout')!;
}

/**
* Get the configured data display limit for DataFrames
* @param defaultLimit - Default limit to use if not configured
Expand Down
3 changes: 3 additions & 0 deletions src/test/kernelControls.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,9 @@ const mockVscode = {
},
workspace: {
getWorkspaceFolder: () => ({ uri: { fsPath: '/workspace' } }),
getConfiguration: () => ({
get: (_key: string, defaultValue?: unknown) => defaultValue,
}),
},
Disposable: class {
static from(...disposables: { dispose: () => void }[]) {
Expand Down
3 changes: 3 additions & 0 deletions src/test/pythonKernelController.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,9 @@ const mockVscode = {
},
workspace: {
getWorkspaceFolder: () => ({ uri: { fsPath: '/workspace' } }),
getConfiguration: () => ({
get: (_key: string, defaultValue?: unknown) => defaultValue,
}),
},
Disposable: class {
static from(...disposables: { dispose: () => void }[]) {
Expand Down