Skip to content

Commit 3b1f988

Browse files
authored
[registry facade] Don't retry requests with error messages that were successful (#20889)
1 parent da9a0c2 commit 3b1f988

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

components/blobserve/pkg/blobserve/refstore_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ func TestBlobFor(t *testing.T) {
118118
refDescriptor: provideDescriptor,
119119
},
120120
Expectation: Expectation{
121-
Error: "cannot fetch manifest: " + hashManifest + " not found",
121+
Error: "failed to fetch manifest: " + hashManifest + " not found",
122122
},
123123
},
124124
{

components/registry-facade/pkg/registry/manifest.go

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,10 @@ func DownloadConfig(ctx context.Context, fetch FetcherFunc, ref string, desc oci
318318
rc, err = fetcher.Fetch(ctx, desc)
319319
if err != nil {
320320
log.WithError(err).Warn("cannot fetch config")
321-
return false, nil // retry
321+
if retryableError(err) {
322+
return false, nil // retry
323+
}
324+
return false, err
322325
}
323326
defer rc.Close()
324327
}
@@ -467,7 +470,10 @@ func DownloadManifest(ctx context.Context, fetch FetcherFunc, desc ociv1.Descrip
467470
rc, err = fetcher.Fetch(ctx, desc)
468471
if err != nil {
469472
log.WithError(err).Warn("cannot fetch manifest")
470-
return false, nil // retry
473+
if retryableError(err) {
474+
return false, nil // retry
475+
}
476+
return false, err
471477
}
472478
mediaType = desc.MediaType
473479
}
@@ -521,7 +527,10 @@ func DownloadManifest(ctx context.Context, fetch FetcherFunc, desc ociv1.Descrip
521527
rc, err = fetcher.Fetch(ctx, md)
522528
if err != nil {
523529
log.WithError(err).Warn("cannot download config")
524-
return false, nil // retry
530+
if retryableError(err) {
531+
return false, nil // retry
532+
}
533+
return false, err
525534
}
526535
rdesc = &md
527536
inpt, err = io.ReadAll(rc)
@@ -587,3 +596,19 @@ func (mh *manifestHandler) putManifest(w http.ResponseWriter, r *http.Request) {
587596
func (mh *manifestHandler) deleteManifest(w http.ResponseWriter, r *http.Request) {
588597
respondWithError(w, distv2.ErrorCodeManifestUnknown)
589598
}
599+
600+
func retryableError(err error) bool {
601+
if err == nil {
602+
return false
603+
}
604+
if errors.Is(err, errdefs.ErrNotFound) || errors.Is(err, errdefs.ErrInvalidArgument) {
605+
return false
606+
}
607+
if strings.Contains(err.Error(), "not found") ||
608+
strings.Contains(err.Error(), "invalid argument") ||
609+
strings.Contains(err.Error(), "not implemented") ||
610+
strings.Contains(err.Error(), "unsupported media type") {
611+
return false
612+
}
613+
return true
614+
}

0 commit comments

Comments
 (0)