Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

podman pull zstd:chunked-image, with vfs: not supported #24308

Closed
edsantiago opened this issue Oct 17, 2024 · 6 comments
Closed

podman pull zstd:chunked-image, with vfs: not supported #24308

edsantiago opened this issue Oct 17, 2024 · 6 comments

Comments

@edsantiago
Copy link
Member

WHEW! It's vfs:

# bin/podman --storage-driver vfs pull quay.io/libpod/testimage:20241010   <<< this was pushed to quay with zstd:chunked
Trying to pull quay.io/libpod/testimage:20241010...
Getting image source signatures
Copying blob a3ed95caeb02 done   | 
Error: copying system image from manifest list: reading blob sha256:d005489f1e59bed02315c1c34bb95b3f46a970a5fd20cdc73c93c6e279689dde: not supported

This is a highly hacked podman with all of @mtrmac's changes to c-s c-i c-c c. Full patch history available on request, but I suspect it will not be needed so I'm saving myself that time.

@mtrmac
Copy link
Collaborator

mtrmac commented Oct 17, 2024

@edsantiago Thanks for tracking this down! A detailed reproducer is indeed unnecessary.

After containers/storage#2118 , we now default to not falling back if a chunked pull fails.

Here, c/storage/pkg/chunked.GetDiffer finds a valid chunked input, and returns a success, regardless of the current graph driver.
Afterwards, c/image calls PrepareStagedLayer; that fails with the VFS driver with ErrNotSupported because it does not implement DriverWithDiffer. And because ErrNotSupported is not ErrFallbackToOrdinaryLayerDownload, this is a hard failure.

One way to handle this would be to return ErrFallbackToOrdinaryLayerDownload from GetDiffer if the graph driver does not support chunked pulls.

@giuseppe How will the planned options to always enforce composefs affect this? Would we just fail in GetDiffer? Or, maybe, should storage.GetStore immediately fail with an invalid composefs + graph driver combination?

mtrmac added a commit to mtrmac/image that referenced this issue Oct 17, 2024
... and, also, indirectly, confirm the hypothesis in
containers/podman#24308 .

Signed-off-by: Miloslav Trmač <[email protected]>
@mtrmac
Copy link
Collaborator

mtrmac commented Oct 17, 2024

containers/image#2607 should improve the error message, but it does not actually allow things to work.

@mtrmac
Copy link
Collaborator

mtrmac commented Oct 17, 2024

Confirmed by manual testing that this is indeed the code path from containers/image#2607 .

@mtrmac
Copy link
Collaborator

mtrmac commented Oct 17, 2024

RFC fix, at least to start the conversation: containers/storage#2140 .

Copy link

A friendly reminder that this issue had no activity for 30 days.

@mtrmac
Copy link
Collaborator

mtrmac commented Nov 22, 2024

Confirmed that this works as expected with main as of 0768328 :

With partial pulls enabled, debug log says

Failed to retrieve partial blob: graph driver vfs does not support partial pull

and we fall back.

With partial pulls + convert_images:

partial pull of blob sha256:…: graph driver vfs does not support partial pull but convert_images requires that

@mtrmac mtrmac closed this as completed Nov 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants