summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Heon <mheon@redhat.com>2021-10-06 11:17:43 -0400
committerMatthew Heon <mheon@redhat.com>2021-10-06 11:19:32 -0400
commit8bd9f58d1d0db76406dca53907095648f4091f9f (patch)
treee01204cca664c9e2ca860d12fbcbbbb9faa942de
parente1089e89d7b8f5204ccb226934e46df736af4925 (diff)
downloadpodman-8bd9f58d1d0db76406dca53907095648f4091f9f.tar.gz
podman-8bd9f58d1d0db76406dca53907095648f4091f9f.tar.bz2
podman-8bd9f58d1d0db76406dca53907095648f4091f9f.zip
Ensure `podman ps --sync` functions
The backend for `ps --sync` has been nonfunctional for a long while now - probably since v2.0. It's questionable how useful the flag is in modern Podman (the original case it was intended to catch, Conmon gone via SIGKILL, should be handled now via pinging the process with a signal to ensure it's still alive) but having the ability to force a refresh of container state from the OCI runtime is still useful. Signed-off-by: Matthew Heon <mheon@redhat.com>
-rw-r--r--libpod/container_api.go2
-rw-r--r--libpod/oci_conmon_linux.go6
-rw-r--r--pkg/ps/ps.go6
3 files changed, 13 insertions, 1 deletions
diff --git a/libpod/container_api.go b/libpod/container_api.go
index ecb307a5d..38223316e 100644
--- a/libpod/container_api.go
+++ b/libpod/container_api.go
@@ -690,7 +690,7 @@ func (c *Container) Sync() error {
// If runtime knows about the container, update its status in runtime
// And then save back to disk
- if c.ensureState(define.ContainerStateCreated, define.ContainerStateRunning, define.ContainerStatePaused, define.ContainerStateStopped) {
+ if c.ensureState(define.ContainerStateCreated, define.ContainerStateRunning, define.ContainerStatePaused, define.ContainerStateStopped, define.ContainerStateStopping) {
oldState := c.state.State
if err := c.ociRuntime.UpdateContainerStatus(c); err != nil {
return err
diff --git a/libpod/oci_conmon_linux.go b/libpod/oci_conmon_linux.go
index 71a7b29fa..fa31c7461 100644
--- a/libpod/oci_conmon_linux.go
+++ b/libpod/oci_conmon_linux.go
@@ -351,6 +351,12 @@ func (r *ConmonOCIRuntime) UpdateContainerStatus(ctr *Container) error {
return ctr.handleExitFile(exitFile, fi)
}
+ // Handle ContainerStateStopping - keep it unless the container
+ // transitioned to no longer running.
+ if oldState == define.ContainerStateStopping && (ctr.state.State == define.ContainerStatePaused || ctr.state.State == define.ContainerStateRunning) {
+ ctr.state.State = define.ContainerStateStopping
+ }
+
return nil
}
diff --git a/pkg/ps/ps.go b/pkg/ps/ps.go
index 69ac9c215..90ad23f49 100644
--- a/pkg/ps/ps.go
+++ b/pkg/ps/ps.go
@@ -136,6 +136,12 @@ func ListContainerBatch(rt *libpod.Runtime, ctr *libpod.Container, opts entities
)
batchErr := ctr.Batch(func(c *libpod.Container) error {
+ if opts.Sync {
+ if err := c.Sync(); err != nil {
+ return errors.Wrapf(err, "unable to update container state from OCI runtime")
+ }
+ }
+
conConfig = c.Config()
conState, err = c.State()
if err != nil {