Skip to content

Commit

Permalink
remote checkpoint/restore: more fixes
Browse files Browse the repository at this point in the history
* Support `checkpoint --pre-checkpoint`

* Support `checkpoint --with-previous`

* Disable `restore --import-previous` for the remote client since we had
  to send two files which in turn would require to tar them up and hence
  be a breaking change.  Podman 4.0 would be the chance and I hope we'll
  find time before that to remote-restore prettier.

Note that I did not run over swagger yet to check whether all parameters
are actually documented due to time constraints.

Fixes: containers#12334
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
  • Loading branch information
vrothberg committed Nov 18, 2021
1 parent 9b96494 commit fceecc3
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/source/markdown/podman-container-restore.1.md
Expand Up @@ -81,6 +81,7 @@ to import a checkpointed *container* from another host.\

Import a pre-checkpoint tar.gz file which was exported by Podman. This option
must be used with **-i** or **--import**. It only works on `runc 1.0-rc3` or `higher`.
*IMPORTANT: This OPTION is not supported on the remote client.*

#### **--name**, **-n**=*name*

Expand Down
4 changes: 4 additions & 0 deletions pkg/api/handlers/libpod/containers.go
Expand Up @@ -219,6 +219,8 @@ func Checkpoint(w http.ResponseWriter, r *http.Request) {
Export bool `schema:"export"`
IgnoreRootFS bool `schema:"ignoreRootFS"`
PrintStats bool `schema:"printStats"`
PreCheckpoint bool `schema:"preCheckpoint"`
WithPrevious bool `schema:"withPrevious"`
}{
// override any golang type defaults
}
Expand All @@ -242,6 +244,8 @@ func Checkpoint(w http.ResponseWriter, r *http.Request) {
TCPEstablished: query.TCPEstablished,
IgnoreRootFS: query.IgnoreRootFS,
PrintStats: query.PrintStats,
PreCheckPoint: query.PreCheckpoint,
WithPrevious: query.WithPrevious,
}

if query.Export {
Expand Down
2 changes: 2 additions & 0 deletions pkg/bindings/containers/types.go
Expand Up @@ -51,6 +51,8 @@ type CheckpointOptions struct {
LeaveRunning *bool
TCPEstablished *bool
PrintStats *bool
PreCheckpoint *bool
WithPrevious *bool
}

//go:generate go run ../generator/generator.go RestoreOptions
Expand Down
30 changes: 30 additions & 0 deletions pkg/bindings/containers/types_checkpoint_options.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions pkg/domain/infra/tunnel/containers.go
Expand Up @@ -308,7 +308,9 @@ func (ic *ContainerEngine) ContainerCheckpoint(ctx context.Context, namesOrIds [
options.WithExport(opts.Export)
options.WithTCPEstablished(opts.TCPEstablished)
options.WithPrintStats(opts.PrintStats)
options.WithPreCheckpoint(opts.PreCheckPoint)
options.WithLeaveRunning(opts.LeaveRunning)
options.WithWithPrevious(opts.WithPrevious)

var (
err error
Expand Down Expand Up @@ -345,6 +347,10 @@ func (ic *ContainerEngine) ContainerCheckpoint(ctx context.Context, namesOrIds [
}

func (ic *ContainerEngine) ContainerRestore(ctx context.Context, namesOrIds []string, opts entities.RestoreOptions) ([]*entities.RestoreReport, error) {
if opts.ImportPrevious != "" {
return nil, fmt.Errorf("--import-previous is not supported on the remote client")
}

options := new(containers.RestoreOptions)
options.WithIgnoreRootfs(opts.IgnoreRootFS)
options.WithIgnoreVolumes(opts.IgnoreVolumes)
Expand Down
1 change: 1 addition & 0 deletions test/e2e/checkpoint_test.go
Expand Up @@ -899,6 +899,7 @@ var _ = Describe("Podman checkpoint", func() {
})

It("podman checkpoint container with --pre-checkpoint and export (migration)", func() {
SkipIfRemote("--import-previous is not yet supported on the remote client")
if !strings.Contains(podmanTest.OCIRuntime, "runc") {
Skip("Test only works on runc 1.0-rc3 or higher.")
}
Expand Down

0 comments on commit fceecc3

Please sign in to comment.