fix(cache): serve S3 data object when companion metadata is stale#390
Draft
worstell wants to merge 1 commit into
Draft
fix(cache): serve S3 data object when companion metadata is stale#390worstell wants to merge 1 commit into
worstell wants to merge 1 commit into
Conversation
The S3 backend commits an object as two sequential writes: the data object, then a companion .meta object carrying mutable metadata. Between the two writes (or when concurrent writers to the same key interleave), the companion's tag doesn't match the data object, and reads reported a miss even though a valid, fully-committed data object exists. For large objects the commit window spans the entire upload of a competing writer, so hot keys could repeatedly appear missing. The data object is self-describing: its immutable headers (including ETag) travel in its own user metadata. On tag mismatch, serve it with those headers and its own expiry instead of returning a miss. The expiry-refresh path then rewrites the companion with the object's tag, reconciling the pair.
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.
The S3 backend commits an object as two sequential writes: the data object, then a companion
.metaobject carrying mutable metadata (ETag, refreshed expiry). Between the two writes — or when concurrent writers to the same key interleave — the companion's tag doesn't match the data object, and reads reported a miss even though a valid, fully-committed data object exists. For large objects the mismatch window spans a competing writer's entire upload, so hot keys can repeatedly appear missing.The data object is self-describing: its immutable headers (including ETag) travel in its own user metadata. On tag mismatch, serve it with those headers and its own expiry instead of returning a miss. The expiry-refresh path then rewrites the companion with the object's tag, reconciling the pair.