Skip to content

Commit c255024

Browse files
committed
merge #4146 into opencontainers/runc:main
Akihiro Suda (1): TestCheckpoint: skip on ErrCriuMissingFeatures LGTMs: cyphar kolyshkin lifubang
2 parents ab146f2 + 3f4a73d commit c255024

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

libcontainer/criu_linux.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import (
2828

2929
var criuFeatures *criurpc.CriuFeatures
3030

31+
var ErrCriuMissingFeatures = errors.New("criu is missing features")
32+
3133
func (c *Container) checkCriuFeatures(criuOpts *CriuOpts, rpcOpts *criurpc.CriuOpts, criuFeat *criurpc.CriuFeatures) error {
3234
t := criurpc.CriuReqType_FEATURE_CHECK
3335

@@ -50,14 +52,14 @@ func (c *Container) checkCriuFeatures(criuOpts *CriuOpts, rpcOpts *criurpc.CriuO
5052
return errors.New("CRIU feature check failed")
5153
}
5254

53-
missingFeatures := false
55+
var missingFeatures []string
5456

5557
// The outer if checks if the fields actually exist
5658
if (criuFeat.MemTrack != nil) &&
5759
(criuFeatures.MemTrack != nil) {
5860
// The inner if checks if they are set to true
5961
if *criuFeat.MemTrack && !*criuFeatures.MemTrack {
60-
missingFeatures = true
62+
missingFeatures = append(missingFeatures, "MemTrack")
6163
logrus.Debugf("CRIU does not support MemTrack")
6264
}
6365
}
@@ -67,13 +69,13 @@ func (c *Container) checkCriuFeatures(criuOpts *CriuOpts, rpcOpts *criurpc.CriuO
6769
if (criuFeat.LazyPages != nil) &&
6870
(criuFeatures.LazyPages != nil) {
6971
if *criuFeat.LazyPages && !*criuFeatures.LazyPages {
70-
missingFeatures = true
72+
missingFeatures = append(missingFeatures, "LazyPages")
7173
logrus.Debugf("CRIU does not support LazyPages")
7274
}
7375
}
7476

75-
if missingFeatures {
76-
return errors.New("CRIU is missing features")
77+
if len(missingFeatures) != 0 {
78+
return fmt.Errorf("%w: %v", ErrCriuMissingFeatures, missingFeatures)
7779
}
7880

7981
return nil

libcontainer/integration/checkpoint_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package integration
33
import (
44
"bufio"
55
"bytes"
6+
"errors"
67
"os"
78
"os/exec"
89
"path/filepath"
@@ -112,6 +113,9 @@ func testCheckpoint(t *testing.T, userns bool) {
112113

113114
if err := container.Checkpoint(preDumpOpts); err != nil {
114115
showFile(t, preDumpLog)
116+
if errors.Is(err, libcontainer.ErrCriuMissingFeatures) {
117+
t.Skip(err)
118+
}
115119
t.Fatal(err)
116120
}
117121

0 commit comments

Comments
 (0)