From 3fb52f4fbb04781e32f72888c9e509dea5d7b434 Mon Sep 17 00:00:00 2001 From: Matthew Heon Date: Mon, 1 Apr 2019 13:30:28 -0400 Subject: Add a StoppedByUser field to the DB This field indicates that a container was explciitly stopped by an API call, and did not exit naturally. It's used when implementing restart policy for containers. Signed-off-by: Matthew Heon --- libpod/container_internal.go | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'libpod/container_internal.go') diff --git a/libpod/container_internal.go b/libpod/container_internal.go index a791df491..0b9c5a96a 100644 --- a/libpod/container_internal.go +++ b/libpod/container_internal.go @@ -376,6 +376,7 @@ func resetState(state *ContainerState) error { state.ExecSessions = make(map[string]*ExecSession) state.NetworkStatus = nil state.BindMounts = make(map[string]string) + state.StoppedByUser = false return nil } @@ -789,6 +790,7 @@ func (c *Container) init(ctx context.Context) error { c.state.ExitCode = 0 c.state.Exited = false c.state.State = ContainerStateCreated + c.state.StoppedByUser = false if err := c.save(); err != nil { return err @@ -950,6 +952,11 @@ func (c *Container) stop(timeout uint) error { return err } + c.state.StoppedByUser = true + if err := c.save(); err != nil { + return errors.Wrapf(err, "error saving container %s state after stopping", c.ID()) + } + // Wait until we have an exit file, and sync once we do return c.waitForExitFileAndSync() } -- cgit v1.2.3-54-g00ecf