in pkg/containerd/handler.go [83:115]
func (r *Registry) handleManifest(c pcontext.Context, dgst digest.Digest) {
size, err := r.containerdStore.Size(c, dgst)
if err != nil {
//nolint
c.AbortWithError(http.StatusNotFound, err)
return
} else if size >= maxManifestSize {
//nolint
c.AbortWithError(http.StatusNotFound, fmt.Errorf("refusing to serve a manifest larger than %v bytes, got: %v", maxManifestSize, size))
return
}
b, mediaType, err := r.containerdStore.Bytes(c, dgst)
if err != nil {
//nolint
c.AbortWithError(http.StatusInternalServerError, err)
return
}
c.Header(contentTypeHeader, mediaType)
c.Header(contentLengthHeader, strconv.FormatInt(int64(len(b)), 10))
c.Header(dockerContentDigestHeader, dgst.String())
if c.Request.Method == http.MethodHead {
return
}
_, err = c.Writer.Write(b)
if err != nil {
//nolint
c.AbortWithError(http.StatusServiceUnavailable, err)
return
}
}