From b0572d622974837c2221ed1f01a2ab982f078370 Mon Sep 17 00:00:00 2001
From: Adrian Reber <areber@redhat.com>
Date: Tue, 20 Nov 2018 15:34:15 +0000
Subject: Added option to keep containers running after checkpointing

CRIU supports to leave processes running after checkpointing:

  -R|--leave-running    leave tasks in running state after checkpoint

runc also support to leave containers running after checkpointing:

   --leave-running      leave the process running after checkpointing

With this commit the support to leave a container running after
checkpointing is brought to Podman:

   --leave-running, -R  leave the container running after writing checkpoint to disk

Now it is possible to checkpoint a container at some point in time
without stopping the container. This can be used to rollback the
container to an early state:

$ podman run --tmpfs /tmp --name podman-criu-test -d docker://docker.io/yovfiatbeb/podman-criu-test
$ curl 10.88.64.253:8080/examples/servlets/servlet/HelloWorldExample
3
$ podman container checkpoint -R -l
$ curl 10.88.64.253:8080/examples/servlets/servlet/HelloWorldExample
4
$ curl 10.88.64.253:8080/examples/servlets/servlet/HelloWorldExample
5
$ podman stop -l
$ podman container restore -l
$ curl 10.88.64.253:8080/examples/servlets/servlet/HelloWorldExample
4

So after checkpointing the container kept running and was stopped after
some time. Restoring this container will restore the state right at the
checkpoint.

Signed-off-by: Adrian Reber <areber@redhat.com>
---
 cmd/podman/checkpoint.go | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

(limited to 'cmd')

diff --git a/cmd/podman/checkpoint.go b/cmd/podman/checkpoint.go
index 49e2aec63..ddfd12bc3 100644
--- a/cmd/podman/checkpoint.go
+++ b/cmd/podman/checkpoint.go
@@ -23,6 +23,10 @@ var (
 			Name:  "keep, k",
 			Usage: "keep all temporary checkpoint files",
 		},
+		cli.BoolFlag{
+			Name:  "leave-running, R",
+			Usage: "leave the container running after writing checkpoint to disk",
+		},
 		cli.BoolFlag{
 			Name:  "all, a",
 			Usage: "checkpoint all running containers",
@@ -51,7 +55,8 @@ func checkpointCmd(c *cli.Context) error {
 	defer runtime.Shutdown(false)
 
 	options := libpod.ContainerCheckpointOptions{
-		Keep: c.Bool("keep"),
+		Keep:        c.Bool("keep"),
+		KeepRunning: c.Bool("leave-running"),
 	}
 
 	if err := checkAllAndLatest(c); err != nil {
-- 
cgit v1.2.3-54-g00ecf