fix: reuse and close executor namespace clients - #728
Open
hfutatzhanghb wants to merge 3 commits into
Open
Conversation
hfutatzhanghb
marked this pull request as ready for review
July 31, 2026 07:17
Contributor
Author
|
Hi @LuciferYang ~ could you please help review this PR when have free time? Thanks very much !!! |
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.
Summary
LanceColumnarPartitionReaderinstead of once per fragmentAutoCloseablenamespace implementations after fragment resources on normal completion and scan/open failuresRoot cause
With
executor_credential_refresh=true,LanceFragmentScanner.create()calledLanceRuntime.getOrCreateNamespace()before every fragment. Despite its name, that methodalways creates a new
LanceNamespaceconnection. The fragment scanner owned and closed itsnative scanner and dataset, but nobody owned or closed the namespace client.
Hive2 and Hive3 namespace implementations are
Closeableand own HMS client pools. As aresult, a Spark task scanning multiple fragments repeatedly created HMS-backed namespace
clients and leaked their connections.
Fix
LanceColumnarPartitionReadernow owns executor namespace initialization and cleanup becauseits lifecycle matches one Spark task. Initialization remains lazy and preserves the existing
executor_credential_refreshanduseNamespaceOnWorkersgates. The namespace stays attachedto the task-local read options while fragments are scanned, then is cleared and closed after
the active fragment scanner.
The failure path preserves the original exception and attaches cleanup failures as suppressed
exceptions. Repeated reader close calls remain idempotent.
Validation
Regression tests were added against the existing real local Lance test dataset with a
recording namespace implementation. They cover:
executor_credential_refresh=falseLocal Maven tests, compilation, lint, and formatting checks were intentionally not run under
the repository-specific Lance workflow policy; GitHub Actions is the validation gate.