Skip to content

Conversation

@Johan-Liebert1
Copy link
Collaborator

When pulling from containers storage we were requesting a layer using the compressed sha digest for that particular layer which caused skopeo to throw the error

failed to invoke method GetBlob: locating item named "sha256:<snip>" for
image with ID "<snip>" (consider removing the image to resolve the issue):
file does not exist

To remedy this, when pulling from containers storage we now query using the get_blob method using the uncompressed sha digest for the layer

Related: bootc-dev/bootc#1703

@Johan-Liebert1 Johan-Liebert1 force-pushed the containers-storage-fix branch 2 times, most recently from 282f2a7 to 3614a62 Compare January 21, 2026 11:29

/// A backend/transport for OCI/Docker images.
#[derive(Debug)]
pub enum Transport {
Copy link
Collaborator

Choose a reason for hiding this comment

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

ref youki-dev/oci-spec-rs#205 and we have some duplicate code in ostree-rs-ext too

Copy link
Collaborator

Choose a reason for hiding this comment

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

In the short term I'd probably say we try to lower this to containers-image-proxy-rs ?

Copy link
Collaborator

Choose a reason for hiding this comment

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

Or at the very least, this probably shouldn't be pub since we're not exposing it via any API, and it would avoid confusion with the duplicate in ostree-ext.

let blob_reader = blob_reader.take(descriptor.size());
let blob_reader = blob_reader.take(size);

let bar = self.progress.add(ProgressBar::new(descriptor.size()));
Copy link
Collaborator

Choose a reason for hiding this comment

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

This should be updated to use size as above, right? Otherwise the progress bar is going to scale based on the compressed size even in the uncompressed case.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Right, I missed that

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Updated

let permit = Arc::clone(&sem).acquire_owned().await?;
let descriptor = mld.clone();

// SAFETY: We get descriptor from the manifest_layers itself
Copy link
Collaborator

Choose a reason for hiding this comment

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

I haven't looked at the surrounding context of this function, but just based on the local information manifest_layers is passed into the function as &[Descriptor], which could easily be an empty slice and makes this unwrap() safety assumption incorrect.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Yeah, I think that's fair. Better to print an error than crash

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Updated

@cgwalters
Copy link
Collaborator

This one also relates to bootc-dev/containers-image-proxy-rs#114 and I think it might clean things up a lot to push down into the proxy the handling for decompression too.

@Johan-Liebert1
Copy link
Collaborator Author

Opened bootc-dev/containers-image-proxy-rs#120 moving the Transport enum

@Johan-Liebert1 Johan-Liebert1 force-pushed the containers-storage-fix branch 3 times, most recently from eff4067 to e3b8ac2 Compare January 27, 2026 06:36
@Johan-Liebert1
Copy link
Collaborator Author

Requires a release for containers-image-proxy bootc-dev/containers-image-proxy-rs#124, so we don't have to specify package using git revision

Signed-off-by: Pragyan Poudyal <pragyanpoudyal41999@gmail.com>
@Johan-Liebert1 Johan-Liebert1 force-pushed the containers-storage-fix branch 3 times, most recently from dd25c1f to fe40918 Compare January 27, 2026 15:08
Copy link
Collaborator

@cgwalters cgwalters left a comment

Choose a reason for hiding this comment

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

This looks good, but I think in a future refactoring we should change things so OpenImage always grabs both the stock and uncompressed manifest and then have the operations default to using it.

When pulling from containers storage we were requesting a layer using
the compressed sha digest for that particular layer which caused skopeo
to throw the error

```
failed to invoke method GetBlob: locating item named "sha256:<snip>" for
image with ID "<snip>" (consider removing the image to resolve the issue):
file does not exist
```

To remedy this, when pulling from containers storage we now query using
the `get_blob` method using the uncompressed sha digest for the layer

Related: bootc-dev/bootc#1703

Signed-off-by: Pragyan Poudyal <pragyanpoudyal41999@gmail.com>
@cgwalters
Copy link
Collaborator

@jeckersb blocked on your change request

@cgwalters
Copy link
Collaborator

ping @jeckersb

Copy link
Collaborator

@jeckersb jeckersb left a comment

Choose a reason for hiding this comment

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

Doh sorry, still catching up on mail/notifications...

Ship it! 🚢

@jeckersb jeckersb merged commit deda942 into containers:main Jan 29, 2026
14 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants