mirror of
https://github.com/containers/podman.git
synced 2025-08-06 11:32:07 +08:00
Merge pull request #8819 from chen-zhuohan/add-pre-checkpoint
Add pre-checkpoint and restore with previous
This commit is contained in:
@ -768,10 +768,14 @@ func (r *ConmonOCIRuntime) CheckpointContainer(ctr *Container, options Container
|
||||
}
|
||||
// imagePath is used by CRIU to store the actual checkpoint files
|
||||
imagePath := ctr.CheckpointPath()
|
||||
if options.PreCheckPoint {
|
||||
imagePath = ctr.PreCheckPointPath()
|
||||
}
|
||||
// workPath will be used to store dump.log and stats-dump
|
||||
workPath := ctr.bundlePath()
|
||||
logrus.Debugf("Writing checkpoint to %s", imagePath)
|
||||
logrus.Debugf("Writing checkpoint logs to %s", workPath)
|
||||
logrus.Debugf("Pre-dump the container %t", options.PreCheckPoint)
|
||||
args := []string{}
|
||||
args = append(args, r.runtimeFlags...)
|
||||
args = append(args, "checkpoint")
|
||||
@ -785,6 +789,15 @@ func (r *ConmonOCIRuntime) CheckpointContainer(ctr *Container, options Container
|
||||
if options.TCPEstablished {
|
||||
args = append(args, "--tcp-established")
|
||||
}
|
||||
if !options.PreCheckPoint && options.KeepRunning {
|
||||
args = append(args, "--leave-running")
|
||||
}
|
||||
if options.PreCheckPoint {
|
||||
args = append(args, "--pre-dump")
|
||||
}
|
||||
if !options.PreCheckPoint && options.WithPrevious {
|
||||
args = append(args, "--parent-path", ctr.PreCheckPointPath())
|
||||
}
|
||||
runtimeDir, err := util.GetRuntimeDir()
|
||||
if err != nil {
|
||||
return err
|
||||
@ -793,6 +806,7 @@ func (r *ConmonOCIRuntime) CheckpointContainer(ctr *Container, options Container
|
||||
return errors.Wrapf(err, "cannot set XDG_RUNTIME_DIR")
|
||||
}
|
||||
args = append(args, ctr.ID())
|
||||
logrus.Debugf("the args to checkpoint: %s %s", r.path, strings.Join(args, " "))
|
||||
return utils.ExecCmdWithStdStreams(os.Stdin, os.Stdout, os.Stderr, nil, r.path, args...)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user