Repository navigation
fix: tiered CopyObject converges under its pre-forward version; converge retries once - #228
Merged
Merged
Conversation
…rge retries once CopyObject was the last mode-blind mutating handler whose post-success converge out-deleted racing writers in tiered mode: a small PUT acked while the copy was in flight — the local tier's only copy — lost its metadata behind the copy's 200. It now claims the key and captures a pre-forward token like the forwarded DELETE, converging only the state the copy displaced. The tiered converge also retries once on a transient error (the discipline the proxy-mode converge already had), keeping the version guard: a converge that never lands leaves deleted metadata authoritative until TTL. Dead unreachable branch removed from the engine's PUT error path. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L5DLvDTo9dhD38YQXhHpU9
singler
previously approved these changes
Sep 17, 2026
|
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L5DLvDTo9dhD38YQXhHpU9
Contributor
Author
|
@greptile review — added the converge-retry regression test (same version across the retry, exactly two attempts on persistent failure). |
|
🎉 This PR is included in version 1.22.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
Fixes the three findings the bots raised on release PR #227:
convergeInvalidation. A small PUT acked while the copy was in flight — the local tier's only copy — lost its metadata behind the copy's 200 and read as an authoritative 404. It now claims the key (cancelling/excluding re-tiers) and captures a pre-forward token, converging viaconvergeTieredDelete— the same rule the forwarded DELETE paths use. Regression test fails against the old code, passes with the fix.convergeInvalidationalready applied.src.errbranch in the engine PUT error path (cursor, low): removed.🤖 Generated with Claude Code
https://claude.ai/code/session_01L5DLvDTo9dhD38YQXhHpU9
Note
Medium Risk
Changes tiered cache/metadata convergence for CopyObject and DELETE converge retries—incorrect version guards could cause stale metadata or data loss in race scenarios, but behavior is aligned with existing DELETE paths and heavily tested.
Overview
Tiered
CopyObjectnow matches forwarded DELETE convergence: it claims the destination key (cancelling re-tiers), records the pre-forward metadata version, and after a successful upstream copy callsconvergeTieredDeleteinstead of unconditional cache invalidation and warming. That stops a racing small PUT on the destination from being wiped when its local-tier copy is the only copy.convergeTieredDeleteretriesDeleteMetaIfVersiononce on failure, still using the same version token (aligned withconvergeInvalidation).localstorePutObject error handling drops a duplicate unreachablesrc.errbranch.Regression tests cover copy-vs-racing-PUT and single-retry converge behavior.
Reviewed by Cursor Bugbot for commit 30d5b8f. Bugbot is set up for automated code reviews on this repo. Configure here.