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

Support for Block CIMs #2261

Merged
merged 4 commits into from
Dec 17, 2024
Merged

Support for Block CIMs #2261

merged 4 commits into from
Dec 17, 2024

Conversation

ambarve
Copy link
Contributor

@ambarve ambarve commented Sep 9, 2024

This PR adds support for creating, mounting and using block CIMs for running windows process isolated containers.
Individual commits provide additional details on what changes they bring in.

@ambarve ambarve force-pushed the blocked_cim_import branch 3 times, most recently from ad3aed4 to 2afb976 Compare September 10, 2024 20:48
@ambarve ambarve changed the title Blocked cim import Support for Block CIMs Sep 10, 2024
@ambarve ambarve marked this pull request as ready for review September 11, 2024 18:17
@ambarve ambarve requested a review from a team as a code owner September 11, 2024 18:17
pkg/cimfs/cimfs.go Outdated Show resolved Hide resolved
internal/winapi/cimfs.go Outdated Show resolved Hide resolved
pkg/cimfs/cimfs.go Outdated Show resolved Hide resolved
@msscotb msscotb assigned apurv15 and unassigned msscotb Sep 27, 2024
@ambarve ambarve force-pushed the blocked_cim_import branch from 2afb976 to cda4bee Compare October 2, 2024 21:35
@@ -34,10 +33,6 @@ func processBaseLayerHives(layerPath string) ([]pendingCimOp, error) {
}

hivesDirInfo := &winio.FileBasicInfo{
CreationTime: windows.NsecToFiletime(time.Now().UnixNano()),
Copy link
Contributor

Choose a reason for hiding this comment

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

What would be the values of these Times when not set explicitly here?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I believe it will be January 1, 1601 as mentioned here.

internal/wclayer/cim/forked_cim_writer.go Show resolved Hide resolved
@kevpar
Copy link
Member

kevpar commented Nov 14, 2024

It looks like we leak stdFileWriter.root

@ambarve ambarve force-pushed the blocked_cim_import branch 2 times, most recently from 1a701f4 to dae1b73 Compare November 26, 2024 18:33
internal/layers/helpers.go Outdated Show resolved Hide resolved
pkg/cimfs/cim_test.go Outdated Show resolved Hide resolved
pkg/cimfs/cim_test.go Outdated Show resolved Hide resolved
@kevpar
Copy link
Member

kevpar commented Dec 13, 2024

With the recent quality focus, I would spend some time thinking about how to expand test coverage of this work. For instance, adding tests for parsing of WCOW layers seems like a really easy one.

@ambarve
Copy link
Contributor Author

ambarve commented Dec 13, 2024

With the recent quality focus, I would spend some time thinking about how to expand test coverage of this work. For instance, adding tests for parsing of WCOW layers seems like a really easy one.

Yeah, I can add those. In a separate PR though, right? I don't know if we should keep this PR open until those tests get added & reviewed.

@kevpar
Copy link
Member

kevpar commented Dec 13, 2024

With the recent quality focus, I would spend some time thinking about how to expand test coverage of this work. For instance, adding tests for parsing of WCOW layers seems like a really easy one.

Yeah, I can add those. In a separate PR though, right? I don't know if we should keep this PR open until those tests get added & reviewed.

I will leave it up to you to do in a future PR, but please try to do it soon.

Copy link
Member

@kevpar kevpar left a comment

Choose a reason for hiding this comment

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

LGTM

Currently we have a map which maintains a mapping of CIM & containerd ID to the volume at
which a CIM is mounted for the given container. This was required before the layer
refactoring work when we needed to get the volume path from the layer cim path. However,
this isn't needed anymore. As of now, this map doesn't provide much value and makes the code a
bit complicated. Moreover, we will need to rewrite some of this code anyway when we do the work
required for handling `shim delete` cleanups properly (containerd/containerd#9727).

Signed-off-by: Amit Barve <[email protected]>
CimFS now supports a new format for storing CIMs, named BlockCIM.  A block CIM format can
store the entire CIM on a block device (like a VHD) or a file formatted like a block
device.

This commit adds Go wrappers for the new CimFS APIs that allow creation, merging and
mounting of such Block CIMs. Some new flags required when creating and mounting these CIMs
are added and some deprecated flags have been removed. New type has been introduced to
represent a block CIM. Unit tests have been added to test the newly added CimFS
functionality. Lastly, CimFS flags aren't a part of the hcs schema (only the CimMount
request is), those flags are moved from the hcs/schema2 package to the cimfs package.

Signed-off-by: Amit Barve <[email protected]>
This commit adds a layer writer that can be used for extracting an image layer tar into a
Block CIM format.

Existing forked CIM layer writer was renamed to a common base type `cimLayerWriter`.
Forked CIM layer writer & Block CIM layer writer both now extend this common base type to
write layers in that specific format.

This commit also removes some code that used `time.Now()` as the default timestamps for
some files that it creates within the layer CIM. These timestamps cause differences in the
layer CIMs generated from the same layer tar. This change fixes that.

Signed-off-by: Amit Barve <[email protected]>
This commit adds the ability to parse block CIM layer mounts and to mount the merged block
CIMs to be used as a rootfs for a container.

Signed-off-by: Amit Barve <[email protected]>
@ambarve ambarve merged commit f234e83 into microsoft:main Dec 17, 2024
19 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.

4 participants