pkg/ostree: remove stale .part sidecars from a different interrupted pull - #25
Draft
detsch wants to merge 1 commit into
Draft
pkg/ostree: remove stale .part sidecars from a different interrupted pull#25detsch wants to merge 1 commit into
detsch wants to merge 1 commit into
Conversation
…pull An interrupted pull leaves content-object .part sidecars in the repo's tmp/ directory as byte-level resume state. The resume logic only ever revisits objects the current commit references, so sidecars left by a different, abandoned target were never cleaned up and lingered forever. After a full pull computes its content set, remove any .filez.part sidecar whose checksum is not in that set, and keep the ones that are (so their partial bytes still resume). This naturally scopes cleanup to "a different version is being pulled": re-running the same interrupted commit keeps every leftover, since all of them are still referenced. Cleanup is best-effort (a failed unlink is skipped, not fatal) and only touches tmp/*.filez.part files with a valid 64-hex stem; delta .part files live under deltas/ and are untouched. The count is surfaced as PullResult.PartsRemoved. Signed-off-by: Andre Detsch <andre.detsch@foundries.io> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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.
An interrupted pull leaves content-object .part sidecars in the repo's tmp/ directory as byte-level resume state. The resume logic only ever revisits objects the current commit references, so sidecars left by a different, abandoned target were never cleaned up and lingered forever.
After a full pull computes its content set, remove any .filez.part sidecar whose checksum is not in that set, and keep the ones that are (so their partial bytes still resume). This naturally scopes cleanup to "a different version is being pulled": re-running the same interrupted commit keeps every leftover, since all of them are still referenced.
Cleanup is best-effort (a failed unlink is skipped, not fatal) and only touches tmp/*.filez.part files with a valid 64-hex stem; delta .part files live under deltas/ and are untouched. The count is surfaced as PullResult.PartsRemoved.