Merge pull request #4708 from kzys/enable-criu

Re-enable CRIU tests by not using overlayfs snapshotter
This commit is contained in:
Michael Crosby 2021-03-19 14:23:05 -04:00 committed by GitHub
commit e0c94bb269
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 47 additions and 7 deletions

View File

@ -322,6 +322,22 @@ jobs:
sudo GOPATH=$GOPATH GOPROXY=$GOPROXY TEST_RUNTIME=$TEST_RUNTIME RUNC_FLAVOR=$RUNC_FLAVOR TESTFLAGS_PARALLEL=1 make integration EXTRA_TESTFLAGS=-no-criu
working-directory: src/github.com/containerd/containerd
# CRIU wouldn't work with overlay snapshotter yet.
# See https://github.com/containerd/containerd/pull/4708#issuecomment-724322294.
- name: CRIU Integration
env:
GOPROXY: direct
TEST_RUNTIME: ${{ matrix.runtime }}
RUNC_FLAVOR: ${{ matrix.runc }}
# crun doesn't have "checkpoint" command.
if: ${{ matrix.runc == 'runc' }}
run: |
sudo GOPATH=$GOPATH GOPROXY=$GOPROXY \
TEST_RUNTIME=$TEST_RUNTIME RUNC_FLAVOR=$RUNC_FLAVOR TESTFLAGS_PARALLEL=1 \
TEST_SNAPSHOTTER=native \
make integration EXTRA_TESTFLAGS='-run TestCheckpoint'
working-directory: src/github.com/containerd/containerd
- name: CRI Integration Test
env:
TEST_RUNTIME: ${{ matrix.runtime }}

View File

@ -50,6 +50,7 @@ var (
noCriu bool
supportsCriu bool
testNamespace = "testing"
testSnapshotter = DefaultSnapshotter
ctrdStdioFilePath string
ctrd = &daemon{}
@ -132,11 +133,30 @@ func TestMain(m *testing.M) {
// allow comparison with containerd under test
log.G(ctx).WithFields(logrus.Fields{
"version": version.Version,
"revision": version.Revision,
"runtime": os.Getenv("TEST_RUNTIME"),
"version": version.Version,
"revision": version.Revision,
"runtime": os.Getenv("TEST_RUNTIME"),
"snapshotter": os.Getenv("TEST_SNAPSHOTTER"),
}).Info("running tests against containerd")
snapshotter := DefaultSnapshotter
if ss := os.Getenv("TEST_SNAPSHOTTER"); ss != "" {
snapshotter = ss
}
ns, ok := namespaces.Namespace(ctx)
if !ok {
fmt.Fprintln(os.Stderr, "error getting namespace")
os.Exit(1)
}
err = client.NamespaceService().SetLabel(ctx, ns, defaults.DefaultSnapshotterNSLabel, snapshotter)
if err != nil {
fmt.Fprintf(os.Stderr, "error setting %s's default snapshotter as %s: %s\n", ns, snapshotter, err)
os.Exit(1)
}
testSnapshotter = snapshotter
// pull a seed image
log.G(ctx).WithField("image", testImage).Info("start to pull seed image")
if _, err = client.Pull(ctx, testImage, WithPullUnpack); err != nil {
@ -285,7 +305,7 @@ func TestImagePullWithDiscardContent(t *testing.T) {
t.Fatalf("there is no layers in the target image(parent: %v)", img.Target())
}
var (
sn = client.SnapshotService("")
sn = client.SnapshotService(testSnapshotter)
chain []digest.Digest
)
for i, dgst := range layers {

View File

@ -414,7 +414,7 @@ func TestCheckpointLeaveRunning(t *testing.T) {
<-statusC
}
func TestCRWithImagePath(t *testing.T) {
func TestCheckpointRestoreWithImagePath(t *testing.T) {
if !supportsCriu {
t.Skip("system does not have criu installed")
}

View File

@ -193,11 +193,15 @@ func (p *Init) createCheckpointedState(r *CreateConfig, pidFile *pidFile) error
ParentPath: r.ParentCheckpoint,
},
PidFile: pidFile.Path(),
IO: p.io.IO(),
NoPivot: p.NoPivotRoot,
Detach: true,
NoSubreaper: true,
}
if p.io != nil {
opts.IO = p.io.IO()
}
p.initState = &createdCheckpointState{
p: p,
opts: opts,

View File

@ -49,7 +49,7 @@ func NewContainer(ctx context.Context, platform stdio.Platform, r *task.CreateTa
}
var opts options.Options
if r.Options != nil {
if r.Options != nil && r.Options.GetTypeUrl() != "" {
v, err := typeurl.UnmarshalAny(r.Options)
if err != nil {
return nil, err