This commit is contained in:
Liang Zheng 2025-04-18 04:01:12 +00:00 committed by GitHub
commit e00871cf97
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 43 additions and 3 deletions

View File

@ -459,6 +459,42 @@ func TestGCWithUnusedLayerLinkPath(t *testing.T) {
}
}
func TestGCWithInvalidRevisionLinkFile(t *testing.T) {
ctx := dcontext.Background()
d := inmemory.New()
registry := createRegistry(t, d)
repo := makeRepository(t, registry, "invalidlinkfile")
image := uploadRandomSchema2Image(t, repo)
err := repo.Tags(ctx).Tag(ctx, "image", distribution.Descriptor{Digest: image.manifestDigest})
if err != nil {
t.Fatalf("Failed to tag descriptor: %v", err)
}
// Simulate a missing _manifests/tags directory
revisionLinkPath, err := pathFor(manifestRevisionLinkPathSpec{
name: "invalidlinkfile",
revision: image.manifestDigest,
})
if err != nil {
t.Fatal(err)
}
err = d.PutContent(ctx, revisionLinkPath, []byte("invalid digest"))
if err != nil {
t.Fatal(err)
}
err = MarkAndSweep(dcontext.Background(), d, registry, GCOpts{
DryRun: false,
RemoveUntagged: true,
})
if err != nil {
t.Fatalf("got error: %v, expected nil", err)
}
}
func TestGCWithUnknownRepository(t *testing.T) {
ctx := dcontext.Background()
d := inmemory.New()

View File

@ -247,13 +247,17 @@ func (lbs *linkedBlobStore) Enumerate(ctx context.Context, ingestor func(digest.
}
// read the digest found in link
digest, err := lbs.blobStore.readlink(ctx, filePath)
dgst, err := lbs.blobStore.readlink(ctx, filePath)
if err != nil {
if err == digest.ErrDigestInvalidFormat {
dcontext.GetLogger(ctx).Warnf("invalid link file %s", filePath)
return nil
}
return err
}
// ensure this conforms to the linkPathFns
_, err = lbs.Stat(ctx, digest)
_, err = lbs.Stat(ctx, dgst)
if err != nil {
// we expect this error to occur so we move on
if err == distribution.ErrBlobUnknown {
@ -262,7 +266,7 @@ func (lbs *linkedBlobStore) Enumerate(ctx context.Context, ingestor func(digest.
return err
}
err = ingestor(digest)
err = ingestor(dgst)
if err != nil {
return err
}