@@ -318,7 +318,10 @@ func DownloadConfig(ctx context.Context, fetch FetcherFunc, ref string, desc oci
318
318
rc , err = fetcher .Fetch (ctx , desc )
319
319
if err != nil {
320
320
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
322
325
}
323
326
defer rc .Close ()
324
327
}
@@ -467,7 +470,10 @@ func DownloadManifest(ctx context.Context, fetch FetcherFunc, desc ociv1.Descrip
467
470
rc , err = fetcher .Fetch (ctx , desc )
468
471
if err != nil {
469
472
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
471
477
}
472
478
mediaType = desc .MediaType
473
479
}
@@ -521,7 +527,10 @@ func DownloadManifest(ctx context.Context, fetch FetcherFunc, desc ociv1.Descrip
521
527
rc , err = fetcher .Fetch (ctx , md )
522
528
if err != nil {
523
529
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
525
534
}
526
535
rdesc = & md
527
536
inpt , err = io .ReadAll (rc )
@@ -587,3 +596,19 @@ func (mh *manifestHandler) putManifest(w http.ResponseWriter, r *http.Request) {
587
596
func (mh * manifestHandler ) deleteManifest (w http.ResponseWriter , r * http.Request ) {
588
597
respondWithError (w , distv2 .ErrorCodeManifestUnknown )
589
598
}
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