Skip to content

fix: make overwrites retryable instead of compatible#6014

Merged
jackye1995 merged 8 commits intolance-format:mainfrom
jackye1995:overwrite-conflicts
Feb 25, 2026
Merged

fix: make overwrites retryable instead of compatible#6014
jackye1995 merged 8 commits intolance-format:mainfrom
jackye1995:overwrite-conflicts

Conversation

@jackye1995
Copy link
Copy Markdown
Contributor

@jackye1995 jackye1995 commented Feb 25, 2026

From a Snapshot isolation perspective, 2 overwrites should not just be compatible because they have modified overlapping data between 2 writes. We will mark it as retryable and client can make a decision if it can be retried or not depending on the specific case.

@github-actions github-actions Bot added the bug Something isn't working label Feb 25, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Code Review

Summary: This PR correctly changes overwrite conflict semantics for better Snapshot isolation: two concurrent creates (read_version == 0) are now incompatible, while overwrites on existing datasets return a retryable conflict for client decision-making.

Review Result: ✅ Looks good to merge

The logic is sound:

  • Two creates must be incompatible since only one can create the dataset
  • Overwrites on existing data should be retryable so clients can decide

Test coverage is adequate:

  • Test matrix updated to reflect create vs create behavior
  • test_concurrent_overwrites_retryable validates retryable semantics for existing datasets
  • test_concurrent_create_incompatible validates incompatible semantics for creates

No P0/P1 issues identified.

@jackye1995 jackye1995 changed the title fix: make overwrites retryable and creates incompatible fix: make overwrites retryable instead of compatible Feb 25, 2026
@github-actions github-actions Bot added the java label Feb 25, 2026
@jackye1995 jackye1995 changed the title fix: make overwrites retryable instead of compatible fix!: make overwrites retryable instead of compatible Feb 25, 2026
@jackye1995 jackye1995 changed the title fix!: make overwrites retryable instead of compatible fix: make overwrites retryable instead of compatible Feb 25, 2026
@jackye1995 jackye1995 merged commit f9ff672 into lance-format:main Feb 25, 2026
27 checks passed
@codecov
Copy link
Copy Markdown

codecov Bot commented Feb 25, 2026

Codecov Report

❌ Patch coverage is 93.06931% with 7 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
rust/lance/src/io/commit/conflict_resolver.rs 90.16% 5 Missing and 1 partial ⚠️
rust/lance/src/io/commit.rs 97.50% 0 Missing and 1 partial ⚠️

📢 Thoughts on this report? Let us know!

wjones127 pushed a commit to wjones127/lance that referenced this pull request Feb 25, 2026
From a Snapshot isolation perspective, 2 overwrites should not just be
compatible because they have modified overlapping data between 2 writes.
We will mark it as retryable and client can make a decision if it can be
retried or not depending on the specific case.
wjones127 pushed a commit to wjones127/lance that referenced this pull request Feb 25, 2026
From a Snapshot isolation perspective, 2 overwrites should not just be
compatible because they have modified overlapping data between 2 writes.
We will mark it as retryable and client can make a decision if it can be
retried or not depending on the specific case.
wjones127 pushed a commit that referenced this pull request Feb 26, 2026
From a Snapshot isolation perspective, 2 overwrites should not just be
compatible because they have modified overlapping data between 2 writes.
We will mark it as retryable and client can make a decision if it can be
retried or not depending on the specific case.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working java

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants