Repository navigation
jepsen: avoid replaying ambiguous filesystem writes - #1296
Conversation
|
Important Draft PR not reviewedDraft PRs are not automatically reviewed by default.
To automatically review draft PRs, update your CodeRabbit configuration: reviews:
auto_review:
drafts: true
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Current pushed HEAD: 60221c7. Signed bootjp contact@bootjp.me; only filesystem_workload.clj and its tests changed. Deterministic RED reproduced the shared CI pattern on a normal local filesystem: the first attempt applies 24, another writer applies 29, then an ambiguous close/write failure caused the harness to replay 24. Both overwrite and rename failed 6 assertions. Now ambiguous mutation/SSH failures stop immediately as :info; safe pre-mutation open retries remain. The strict register and final-read checkers are not weakened. Full cached managed Jepsen suite: 237 tests / 676 assertions, 0 failures/errors; diff check passed. All invoke-write! callers and all three write backend paths audited. Existing FUSE PR ownership is preserved, and #1231 is untouched. Linux real-FUSE encryption off/on acceptance is running in CI; the separate common snapshot fixture failure is tracked in #1295. @codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Codex Review: Didn't find any major issues. Bravo. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
|
Additional evidence without changing HEAD 60221c7:
|
Summary
Cause and Evidence
The shared main-integration failure in run 39823030310 (encryption off) reported key 1 as non-linearizable: write 29 succeeded, then reads returned 24, while a concurrent write 24 remained in its retry loop. Retrying a whole possibly applied operation can give one Jepsen write multiple effects. Even a correct backend then cannot satisfy a single linearization point.
The regression writes 24, observes it, writes and observes 29, then injects an ambiguous error. Before this fix, the harness retries 24, reports success and leaves 24 in the real file. Both overwrite and rename fail the regression (6 assertions). After this fix, each stops after one attempt, returns
:info, and preserves 29.This reproduces a concrete harness defect, not proof that every historical FUSE failure has the same cause. Existing artifacts do not expose individual retry attempts. FUSE cache/flush defects must still be investigated if strict acceptance fails after the harness correction.
Scope and Coordination
invoke-write!is called byFilesystemClient.invoke!; its two local write backends and SSH backend are covered. The genericwith-retries, read path, setup and temporary-file cleanup policy are unchanged.Validation
lein -o test :only elastickv.filesystem-workload-test/an-ambiguous-write-cannot-replay-over-a-newer-write: 1 test, 8 assertions, 6 failures, 0 errors before the fix.git diff --checkpassed. No Go implementation changed; no additional full Go/race stress suite started locally. The known unrelated macOS FUSEstat.Namelentypecheck failure prevents the repository-wide Go lint hook; commit used--no-verifyafter focused validation.bootjp <contact@bootjp.me>.60221c7152cec23dedf67d69835d85236e445014: code review and security review both report no findings. Current-head root inline findings: 0. Lint and image build passed; full Go and CodeQL are not yet counted as successful.Author: bootjp