perf: defer Databricks Connect initialization to background thread#31
Merged
Conversation
Kernel startup was blocking ~15s on DatabricksSession.getOrCreate() before sending the "ready" signal. Now the kernel reports ready in ~1-2s by deferring spark initialization to a background thread. A LazySparkSession proxy is placed in the namespace immediately so 'spark' in dir() is True. On first attribute access (e.g. spark.sql()), the proxy blocks until the real session is available - but by then the background init has had a head start (often already complete). Key changes: - kernel_runner.py: Add LazySparkSession proxy, _SparkInitState, background thread init, thread-safe _write_json for stdout - persistentExecutor.ts: Handle new 'spark_ready' message type - utils.ts: Add showSparkReadyNotification, skip INITIALIZING status https://claude.ai/code/session_01NCzUTPmDaWc5Rwr8xB4Zfu
The setting description referenced the old synchronous Spark init which could take 15-25s. With deferred initialization, the kernel starts in 1-2 seconds so the description is updated accordingly. https://claude.ai/code/session_01NCzUTPmDaWc5Rwr8xB4Zfu
97b734b to
f6d7d5b
Compare
The LazySparkSession proxy was permanently caching the background init failure. If the token was expired at startup, every subsequent spark.sql() raised the cached error even after the user ran 'databricks auth login'. Now _get_session() retries initialize_spark_session() synchronously on failure, picking up refreshed tokens from the cache. https://claude.ai/code/session_01NCzUTPmDaWc5Rwr8xB4Zfu
…ve spark session initialization
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Kernel startup was blocking ~15s on DatabricksSession.getOrCreate()
before sending the "ready" signal. Now the kernel reports ready in
~1-2s by deferring spark initialization to a background thread.
A LazySparkSession proxy is placed in the namespace immediately so
'spark' in dir() is True. On first attribute access (e.g. spark.sql()),
the proxy blocks until the real session is available - but by then the
background init has had a head start (often already complete).
Key changes:
background thread init, thread-safe _write_json for stdout
https://claude.ai/code/session_01NCzUTPmDaWc5Rwr8xB4Zfu