From 27ddd45e8ad395ab49c9131f9dce371bf3eecaea Mon Sep 17 00:00:00 2001 From: Amit Kesarkar Date: Wed, 22 Jul 2026 11:57:10 +0530 Subject: [PATCH] Fix resolveUpstreamRef to properly propagate not-found errors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit resolveUpstreamRef() was wrapping errors from imageStreamGetter.layers() with ErrImageStreamUnknownErrorCode regardless of the actual error type. When an ImageStream does not exist, layers() returns ErrImageStreamGetterNotFoundCode, which should be converted to ErrImageStreamNotFoundCode using convertImageStreamGetterError() — the same pattern used by every other method in this file. This caused manifestService.Exists() to return HTTP 500 instead of 404 when a HEAD request was made for a manifest in a non-existent ImageStream. Docker Engine 29+ (with containerd image store) issues such HEAD requests before PUT during push, causing image pushes to fail for new ImageStreams that would otherwise be auto-created. Co-authored-by: Cursor --- pkg/imagestream/imagestream.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pkg/imagestream/imagestream.go b/pkg/imagestream/imagestream.go index 335b040e76..2489a190aa 100644 --- a/pkg/imagestream/imagestream.go +++ b/pkg/imagestream/imagestream.go @@ -233,10 +233,9 @@ func (is *imageStream) GetImageOfImageStream(ctx context.Context, dgst digest.Di func (is *imageStream) resolveUpstreamRef(ctx context.Context, dgst digest.Digest) (reference.DockerImageReference, rerrors.Error) { layers, rErr := is.imageStreamGetter.layers() if rErr != nil { - return reference.DockerImageReference{}, rerrors.NewError( - ErrImageStreamUnknownErrorCode, - fmt.Sprintf("resolveUpstreamRef: failed to get layers for image stream %s", is.Reference()), + return reference.DockerImageReference{}, convertImageStreamGetterError( rErr, + fmt.Sprintf("resolveUpstreamRef: failed to get layers for image stream %s", is.Reference()), ) }