Merge pull request #238 from adrianreber/master
Add criu related debug output
This commit is contained in:
commit
34fe03fa8a
|
@ -9,6 +9,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
"reflect"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
@ -32,6 +33,7 @@ type linuxContainer struct {
|
||||||
initProcess parentProcess
|
initProcess parentProcess
|
||||||
criuPath string
|
criuPath string
|
||||||
m sync.Mutex
|
m sync.Mutex
|
||||||
|
criuVersion int
|
||||||
}
|
}
|
||||||
|
|
||||||
// ID returns the container's unique ID
|
// ID returns the container's unique ID
|
||||||
|
@ -337,7 +339,9 @@ func (c *linuxContainer) checkCriuVersion(min_version string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if x*10000+y*100+z < versionReq {
|
c.criuVersion = x*10000 + y*100 + z
|
||||||
|
|
||||||
|
if c.criuVersion < versionReq {
|
||||||
return fmt.Errorf("CRIU version must be %s or higher", min_version)
|
return fmt.Errorf("CRIU version must be %s or higher", min_version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -665,6 +669,8 @@ func (c *linuxContainer) criuSwrk(process *Process, req *criurpc.CriuReq, opts *
|
||||||
defer criuServer.Close()
|
defer criuServer.Close()
|
||||||
|
|
||||||
args := []string{"swrk", "3"}
|
args := []string{"swrk", "3"}
|
||||||
|
logrus.Debugf("Using CRIU %d at: %s", c.criuVersion, c.criuPath)
|
||||||
|
logrus.Debugf("Using CRIU with following args: %s", args)
|
||||||
cmd := exec.Command(c.criuPath, args...)
|
cmd := exec.Command(c.criuPath, args...)
|
||||||
if process != nil {
|
if process != nil {
|
||||||
cmd.Stdin = process.Stdin
|
cmd.Stdin = process.Stdin
|
||||||
|
@ -701,6 +707,18 @@ func (c *linuxContainer) criuSwrk(process *Process, req *criurpc.CriuReq, opts *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logrus.Debugf("Using CRIU in %s mode", req.GetType().String())
|
||||||
|
val := reflect.ValueOf(req.GetOpts())
|
||||||
|
v := reflect.Indirect(val)
|
||||||
|
for i := 0; i < v.NumField(); i++ {
|
||||||
|
st := v.Type()
|
||||||
|
name := st.Field(i).Name
|
||||||
|
if strings.HasPrefix(name, "XXX_") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
value := val.MethodByName("Get" + name).Call([]reflect.Value{})
|
||||||
|
logrus.Debugf("CRIU option %s with value %v", name, value[0])
|
||||||
|
}
|
||||||
data, err := proto.Marshal(req)
|
data, err := proto.Marshal(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
Loading…
Reference in New Issue