From c67593df1240adbbd425642740f321c3ca9c6654 Mon Sep 17 00:00:00 2001 From: Jhon Honce Date: Thu, 30 Sep 2021 16:07:08 -0700 Subject: [NO TESTS NEEDED] Ignore removed containers * Ignore condition when containers are removed while listing them for ps output. No tests added at this time as they would create a race condition for CI. * Updated godocs See https://github.com/containers/podman/issues/11810 for reproducer. Fixes #11810 Signed-off-by: Jhon Honce --- pkg/domain/entities/container_ps.go | 6 +++--- pkg/ps/ps.go | 21 +++++++++++++++------ 2 files changed, 18 insertions(+), 9 deletions(-) (limited to 'pkg') diff --git a/pkg/domain/entities/container_ps.go b/pkg/domain/entities/container_ps.go index 7c255b0ea..58f231a2f 100644 --- a/pkg/domain/entities/container_ps.go +++ b/pkg/domain/entities/container_ps.go @@ -10,7 +10,7 @@ import ( "github.com/pkg/errors" ) -// Listcontainer describes a container suitable for listing +// ListContainer describes a container suitable for listing type ListContainer struct { // AutoRemove AutoRemove bool @@ -18,7 +18,7 @@ type ListContainer struct { Command []string // Container creation time Created time.Time - // Human readable container creation time. + // Human-readable container creation time. CreatedAt string // If container has exited/stopped Exited bool @@ -65,7 +65,7 @@ type ListContainer struct { Status string } -// ListContainer Namespaces contains the identifiers of the container's Linux namespaces +// ListContainerNamespaces contains the identifiers of the container's Linux namespaces type ListContainerNamespaces struct { // Mount namespace MNT string `json:"Mnt,omitempty"` diff --git a/pkg/ps/ps.go b/pkg/ps/ps.go index 0f154c524..69ac9c215 100644 --- a/pkg/ps/ps.go +++ b/pkg/ps/ps.go @@ -15,6 +15,7 @@ import ( "github.com/containers/podman/v3/pkg/domain/filters" psdefine "github.com/containers/podman/v3/pkg/ps/define" "github.com/containers/storage" + "github.com/containers/storage/types" "github.com/pkg/errors" "github.com/sirupsen/logrus" ) @@ -63,10 +64,14 @@ func GetContainerLists(runtime *libpod.Runtime, options entities.ContainerListOp } for _, con := range cons { listCon, err := ListContainerBatch(runtime, con, options) - if err != nil { + switch { + case errors.Cause(err) == define.ErrNoSuchCtr: + continue + case err != nil: return nil, err + default: + pss = append(pss, listCon) } - pss = append(pss, listCon) } if options.All && options.External { @@ -89,7 +94,7 @@ func GetContainerLists(runtime *libpod.Runtime, options entities.ContainerListOp return pss, nil } -// GetExternalContainerLists returns list of external containers for e.g created by buildah +// GetExternalContainerLists returns list of external containers for e.g. created by buildah func GetExternalContainerLists(runtime *libpod.Runtime) ([]entities.ListContainer, error) { var ( pss = []entities.ListContainer{} @@ -102,15 +107,19 @@ func GetExternalContainerLists(runtime *libpod.Runtime) ([]entities.ListContaine for _, con := range externCons { listCon, err := ListStorageContainer(runtime, con) - if err != nil { + switch { + case errors.Cause(err) == types.ErrLoadError: + continue + case err != nil: return nil, err + default: + pss = append(pss, listCon) } - pss = append(pss, listCon) } return pss, nil } -// BatchContainerOp is used in ps to reduce performance hits by "batching" +// ListContainerBatch is used in ps to reduce performance hits by "batching" // locks. func ListContainerBatch(rt *libpod.Runtime, ctr *libpod.Container, opts entities.ContainerListOptions) (entities.ListContainer, error) { var ( -- cgit v1.2.3-54-g00ecf