You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(gc): keep tag manifests' digest aliases, reap manifest meta sidecars
The tag-rooted mark walk (#938) marked a tag manifest's children (arch
manifests, config, layer blobs) but not the digest-named file of the tag
manifest itself. The sweep then deleted manifests/sha256:<digest>.json
while manifests/<tag>.json — the same bytes — survived, so pull-by-digest
404'd while pull-by-tag worked. The walk now hashes each tag manifest's
bytes and marks the sha256:<digest>.json alias as a root, per the OCI
distribution spec requirement that content pullable by tag stays
pullable by digest.
Also reap the .meta.json sidecar together with an orphaned digest
manifest; it was invisible to detection on its own and leaked forever.
Fixes#949
Signed-off-by: Joe Grund <grundjoseph@gmail.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,9 @@
1
1
# Changelog
2
2
## [Unreleased]
3
3
4
+
### Fixed
5
+
-**GC: tag-rooted mark walk kept a tag manifest's children but swept the digest-named copy of the manifest itself**, so pull-by-digest of a tagged image 404'd after the first GC run while pull-by-tag kept working. The walk now marks `manifests/sha256:<sha256(bytes)>.json` for every tag manifest — the digest alias the OCI distribution spec requires to stay pullable. Orphaned digest manifests now also take their `.meta.json` sidecar with them instead of leaking it. (#949)
0 commit comments