From 416cc20c6800d9c315a689a4c425af23f89864e4 Mon Sep 17 00:00:00 2001
From: Matthew Heon <matthew.heon@pm.me>
Date: Wed, 1 May 2019 15:07:30 -0400
Subject: [PATCH] Small fixes for #2950

We merged #2950 with some nits still remaining, as Giuseppe was
going on PTO. This addresses those small requested changes.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
---
 cmd/podman/libpodruntime/runtime.go |  6 ++----
 libpod/options.go                   | 21 +++------------------
 libpod/runtime.go                   | 18 ++++++++----------
 libpod/runtime_migrate.go           |  5 +++--
 4 files changed, 16 insertions(+), 34 deletions(-)

diff --git a/cmd/podman/libpodruntime/runtime.go b/cmd/podman/libpodruntime/runtime.go
index b03846bbca..b533dc0561 100644
--- a/cmd/podman/libpodruntime/runtime.go
+++ b/cmd/podman/libpodruntime/runtime.go
@@ -78,8 +78,6 @@ func getRuntime(ctx context.Context, c *cliconfig.PodmanCommand, renumber bool,
 		options = append(options, libpod.WithRenumber())
 	}
 
-	options = append(options, libpod.WithContext(ctx))
-
 	// Only set this if the user changes storage config on the command line
 	if storageSet {
 		options = append(options, libpod.WithStorageConfig(storageOpts))
@@ -146,7 +144,7 @@ func getRuntime(ctx context.Context, c *cliconfig.PodmanCommand, renumber bool,
 		options = append(options, libpod.WithDefaultInfraCommand(infraCommand))
 	}
 	if c.Flags().Changed("config") {
-		return libpod.NewRuntimeFromConfig(c.GlobalFlags.Config, options...)
+		return libpod.NewRuntimeFromConfig(ctx, c.GlobalFlags.Config, options...)
 	}
-	return libpod.NewRuntime(options...)
+	return libpod.NewRuntime(ctx, options...)
 }
diff --git a/libpod/options.go b/libpod/options.go
index 9932d54536..d3e0a295d9 100644
--- a/libpod/options.go
+++ b/libpod/options.go
@@ -1,7 +1,6 @@
 package libpod
 
 import (
-	"context"
 	"net"
 	"os"
 	"path/filepath"
@@ -437,10 +436,9 @@ func WithRenumber() RuntimeOption {
 	}
 }
 
-// WithMigrate instructs libpod to perform a lock migrateing while
-// initializing. This will handle migrations from early versions of libpod with
-// file locks to newer versions with SHM locking, as well as changes in the
-// number of configured locks.
+// WithMigrate instructs libpod to migrate container configurations to account
+// for changes between Libpod versions. All running containers will be stopped
+// during a migration, then restarted after the migration is complete.
 func WithMigrate() RuntimeOption {
 	return func(rt *Runtime) error {
 		if rt.valid {
@@ -467,19 +465,6 @@ func WithShmDir(dir string) CtrCreateOption {
 	}
 }
 
-// WithContext sets the context to use.
-func WithContext(ctx context.Context) RuntimeOption {
-	return func(rt *Runtime) error {
-		if rt.valid {
-			return ErrRuntimeFinalized
-		}
-
-		rt.ctx = ctx
-
-		return nil
-	}
-}
-
 // WithSystemd turns on systemd mode in the container
 func WithSystemd() CtrCreateOption {
 	return func(ctr *Container) error {
diff --git a/libpod/runtime.go b/libpod/runtime.go
index e852420286..6b8d97fd9e 100644
--- a/libpod/runtime.go
+++ b/libpod/runtime.go
@@ -112,8 +112,6 @@ type Runtime struct {
 
 	// mechanism to read and write even logs
 	eventer events.Eventer
-
-	ctx context.Context
 }
 
 // OCIRuntimePath contains information about an OCI runtime.
@@ -353,8 +351,8 @@ func SetXdgRuntimeDir(val string) error {
 
 // NewRuntime creates a new container runtime
 // Options can be passed to override the default configuration for the runtime
-func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) {
-	return newRuntimeFromConfig("", options...)
+func NewRuntime(ctx context.Context, options ...RuntimeOption) (runtime *Runtime, err error) {
+	return newRuntimeFromConfig(ctx, "", options...)
 }
 
 // NewRuntimeFromConfig creates a new container runtime using the given
@@ -362,14 +360,14 @@ func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) {
 // functions can be used to mutate this configuration further.
 // An error will be returned if the configuration file at the given path does
 // not exist or cannot be loaded
-func NewRuntimeFromConfig(userConfigPath string, options ...RuntimeOption) (runtime *Runtime, err error) {
+func NewRuntimeFromConfig(ctx context.Context, userConfigPath string, options ...RuntimeOption) (runtime *Runtime, err error) {
 	if userConfigPath == "" {
 		return nil, errors.New("invalid configuration file specified")
 	}
-	return newRuntimeFromConfig(userConfigPath, options...)
+	return newRuntimeFromConfig(ctx, userConfigPath, options...)
 }
 
-func newRuntimeFromConfig(userConfigPath string, options ...RuntimeOption) (runtime *Runtime, err error) {
+func newRuntimeFromConfig(ctx context.Context, userConfigPath string, options ...RuntimeOption) (runtime *Runtime, err error) {
 	runtime = new(Runtime)
 	runtime.config = new(RuntimeConfig)
 	runtime.configuredFrom = new(runtimeConfiguredFrom)
@@ -563,7 +561,7 @@ func newRuntimeFromConfig(userConfigPath string, options ...RuntimeOption) (runt
 			}
 		}
 	}
-	if err := makeRuntime(runtime); err != nil {
+	if err := makeRuntime(ctx, runtime); err != nil {
 		return nil, err
 	}
 	return runtime, nil
@@ -571,7 +569,7 @@ func newRuntimeFromConfig(userConfigPath string, options ...RuntimeOption) (runt
 
 // Make a new runtime based on the given configuration
 // Sets up containers/storage, state store, OCI runtime
-func makeRuntime(runtime *Runtime) (err error) {
+func makeRuntime(ctx context.Context, runtime *Runtime) (err error) {
 	// Backward compatibility for `runtime_path`
 	if runtime.config.RuntimePath != nil {
 		// Don't print twice in rootless mode.
@@ -980,7 +978,7 @@ func makeRuntime(runtime *Runtime) (err error) {
 				os.Exit(ret)
 			}
 		}
-		if err := runtime.migrate(); err != nil {
+		if err := runtime.migrate(ctx); err != nil {
 			return err
 		}
 	}
diff --git a/libpod/runtime_migrate.go b/libpod/runtime_migrate.go
index a084df289e..0bb8e952f4 100644
--- a/libpod/runtime_migrate.go
+++ b/libpod/runtime_migrate.go
@@ -1,13 +1,14 @@
 package libpod
 
 import (
+	"context"
 	"path/filepath"
 
 	"github.com/pkg/errors"
 	"github.com/sirupsen/logrus"
 )
 
-func (r *Runtime) migrate() error {
+func (r *Runtime) migrate(ctx context.Context) error {
 	runningContainers, err := r.GetRunningContainers()
 	if err != nil {
 		return err
@@ -38,7 +39,7 @@ func (r *Runtime) migrate() error {
 	}
 
 	for _, ctr := range runningContainers {
-		if err := ctr.Start(r.ctx, true); err != nil {
+		if err := ctr.Start(ctx, true); err != nil {
 			logrus.Errorf("error restarting container %s", ctr.ID())
 		}
 	}