[Kernel] Add specific exception subclasses for loadSnapshotAt version failures#7055
Open
GabrielBBaldez wants to merge 1 commit into
Open
Conversation
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.
Which Delta project/connector is this regarding?
Description
When loading a snapshot at a specific version,
SnapshotManagercurrently signals both out-of-range failures with a genericKernelException, so callers can only tell them apart by string-matching the message.This adds two typed subclasses of
KernelExceptionand returns them from the correspondingDeltaErrorsfactory methods:VersionToLoadAfterLatestCommitException— the requested version is higher than the latest commit (not materialized yet; typically recoverable by retrying).VersionTruncatedException— the requested version is lower than the earliest available commit because the log has been truncated (unrecoverable for that version).Both extend
KernelException, mirroring howDeltaErrors#missingCheckpointalready returns anInvalidTableException. Connectors can nowcatchthe specific type instead of parsing the message — e.g. the delta-spark V2 CDCSparkMicroBatchStreamcan swallowVersionToLoadAfterLatestCommitExceptionto wait for the version to be committed.Resolves #6745.
How was this patch tested?
Updated the existing
SnapshotManagerSuitecases that exercise these two paths (getLogSegmentForVersion: versionToLoad higher than possibleand... not constructable from history) to assert the specific exception type is thrown instead of the genericRuntimeException.Does this PR introduce any user-facing changes?
No behavioral change: both new types extend
KernelException, so existingcatch (KernelException ...)keeps working and the messages are unchanged. Callers simply gain the option to catch the narrower types.