diff options
author | Matthew Heon <matthew.heon@gmail.com> | 2018-01-03 16:27:33 -0500 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2018-01-17 15:26:43 +0000 |
commit | b814a94c341306875e40b13e4fe7ebffb1b57f5d (patch) | |
tree | 17c50c84d51a57684fb5747b0ff88477a7776d79 | |
parent | 5696dfef6e57826f37624d98773286c89a5f005b (diff) | |
download | podman-b814a94c341306875e40b13e4fe7ebffb1b57f5d.tar.gz podman-b814a94c341306875e40b13e4fe7ebffb1b57f5d.tar.bz2 podman-b814a94c341306875e40b13e4fe7ebffb1b57f5d.zip |
Wire in logic for selecting backing state impl
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
Closes: #229
Approved by: rhatdan
-rw-r--r-- | libpod/options.go | 14 | ||||
-rw-r--r-- | libpod/runtime.go | 27 |
2 files changed, 32 insertions, 9 deletions
diff --git a/libpod/options.go b/libpod/options.go index 4890c71ff..ca4d104df 100644 --- a/libpod/options.go +++ b/libpod/options.go @@ -81,15 +81,21 @@ func WithSignaturePolicy(path string) RuntimeOption { } } -// WithInMemoryState specifies that the runtime will be backed by an in-memory -// state only, and state will not persist after the runtime is shut down -func WithInMemoryState() RuntimeOption { +// WithStateType sets the backing state implementation for libpod +// Please note that information is not portable between backing states +// As such, if this differs between two libpods running on the same system, +// they will not share containers, and unspecified behavior may occur +func WithStateType(storeType RuntimeStateStore) RuntimeOption { return func(rt *Runtime) error { if rt.valid { return ErrRuntimeFinalized } - rt.config.InMemoryState = true + if storeType == InvalidStateStore { + return errors.Wrapf(ErrInvalidArg, "must provide a valid state store type") + } + + rt.config.StateType = storeType return nil } diff --git a/libpod/runtime.go b/libpod/runtime.go index 50aa97528..dc258ab4f 100644 --- a/libpod/runtime.go +++ b/libpod/runtime.go @@ -14,6 +14,21 @@ import ( "github.com/ulule/deepcopier" ) +// RuntimeStateStore is a constant indicating which state store implementation +// should be used by libpod +type RuntimeStateStore int + +const ( + // InvalidStateStore is an invalid state store + InvalidStateStore RuntimeStateStore = iota + // InMemoryStateStore is an in-memory state that will not persist data + // on containers and pods between libpod instances or after system + // reboot + InMemoryStateStore RuntimeStateStore = iota + // SQLiteStateStore is a state backed by a SQLite database + SQLiteStateStore RuntimeStateStore = iota +) + // A RuntimeOption is a functional option which alters the Runtime created by // NewRuntime type RuntimeOption func(*Runtime) error @@ -39,7 +54,7 @@ type RuntimeConfig struct { InsecureRegistries []string Registries []string SignaturePolicyPath string - InMemoryState bool + StateType RuntimeStateStore RuntimePath string ConmonPath string ConmonEnvVars []string @@ -57,7 +72,7 @@ var ( // Leave this empty so containers/storage will use its defaults StorageConfig: storage.StoreOptions{}, ImageDefaultTransport: DefaultTransport, - InMemoryState: false, + StateType: SQLiteStateStore, RuntimePath: "/usr/bin/runc", ConmonPath: findConmonPath(), ConmonEnvVars: []string{ @@ -176,14 +191,14 @@ func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) { runtime.netPlugin = netPlugin // Set up the state - if runtime.config.InMemoryState { + if runtime.config.StateType == InMemoryStateStore { state, err := NewInMemoryState() if err != nil { return nil, err } runtime.state = state - } else { - dbPath := filepath.Join(runtime.config.StaticDir, "state.sql") + } else if runtime.config.StateType == SQLiteStateStore { + dbPath := filepath.Join(runtime.config.StaticDir, "sql_state.db") specsDir := filepath.Join(runtime.config.StaticDir, "ocispec") // Make a directory to hold JSON versions of container OCI specs @@ -200,6 +215,8 @@ func NewRuntime(options ...RuntimeOption) (runtime *Runtime, err error) { return nil, err } runtime.state = state + } else { + return nil, errors.Wrapf(ErrInvalidArg, "unrecognized state type passed") } // We now need to see if the system has restarted |