Skip to content

fix: resolve layer URLs at fetch time#286

Draft
BradLugo wants to merge 1 commit into
quay:mainfrom
BradLugo:fetch-time-layer-urls
Draft

fix: resolve layer URLs at fetch time#286
BradLugo wants to merge 1 commit into
quay:mainfrom
BradLugo:fetch-time-layer-urls

Conversation

@BradLugo

@BradLugo BradLugo commented Jul 9, 2026

Copy link
Copy Markdown

ManifestFromRemote captured presigned blob URLs for every layer before any downloading began; on images with large layers the URLs for later layers expired (typically after 10 minutes) before the fetcher reached them. Store the registry's stable blob URL instead and hand the authenticated transport to the fetch arena, so each layer GET authenticates fresh and follows the storage redirect immediately.

Fixes #275

ManifestFromRemote captured presigned blob URLs for every layer
before any downloading began; on images with large layers the URLs
for later layers expired (typically after 10 minutes) before the
fetcher reached them. Store the registry's stable blob URL instead
and hand the authenticated transport to the fetch arena, so each
layer GET authenticates fresh and follows the storage redirect
immediately.

Fixes quay#275

Signed-off-by: Brad Lugo <brad@bradlugo.com>
Comment thread image/manifest.go
URI: res.Request.URL.String(),
Headers: res.Request.Header,
Hash: ccd,
URI: u.String(),

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To do this, you need add the auth headers. The point of "resolving" the URL is to not have to do that, but it does start any URL auth timer ticking when that's done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

Presigned layer URLs expire before fetch when images have large layers

2 participants