[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 <jhonce@redhat.com>
This commit is contained in:
Jhon Honce 2021-09-30 16:07:08 -07:00
parent e9d8524af5
commit c67593df12
2 changed files with 18 additions and 9 deletions

View File

@ -10,7 +10,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
) )
// Listcontainer describes a container suitable for listing // ListContainer describes a container suitable for listing
type ListContainer struct { type ListContainer struct {
// AutoRemove // AutoRemove
AutoRemove bool AutoRemove bool
@ -18,7 +18,7 @@ type ListContainer struct {
Command []string Command []string
// Container creation time // Container creation time
Created time.Time Created time.Time
// Human readable container creation time. // Human-readable container creation time.
CreatedAt string CreatedAt string
// If container has exited/stopped // If container has exited/stopped
Exited bool Exited bool
@ -65,7 +65,7 @@ type ListContainer struct {
Status string 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 { type ListContainerNamespaces struct {
// Mount namespace // Mount namespace
MNT string `json:"Mnt,omitempty"` MNT string `json:"Mnt,omitempty"`

View File

@ -15,6 +15,7 @@ import (
"github.com/containers/podman/v3/pkg/domain/filters" "github.com/containers/podman/v3/pkg/domain/filters"
psdefine "github.com/containers/podman/v3/pkg/ps/define" psdefine "github.com/containers/podman/v3/pkg/ps/define"
"github.com/containers/storage" "github.com/containers/storage"
"github.com/containers/storage/types"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
@ -63,10 +64,14 @@ func GetContainerLists(runtime *libpod.Runtime, options entities.ContainerListOp
} }
for _, con := range cons { for _, con := range cons {
listCon, err := ListContainerBatch(runtime, con, options) listCon, err := ListContainerBatch(runtime, con, options)
if err != nil { switch {
case errors.Cause(err) == define.ErrNoSuchCtr:
continue
case err != nil:
return nil, err return nil, err
default:
pss = append(pss, listCon)
} }
pss = append(pss, listCon)
} }
if options.All && options.External { if options.All && options.External {
@ -89,7 +94,7 @@ func GetContainerLists(runtime *libpod.Runtime, options entities.ContainerListOp
return pss, nil 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) { func GetExternalContainerLists(runtime *libpod.Runtime) ([]entities.ListContainer, error) {
var ( var (
pss = []entities.ListContainer{} pss = []entities.ListContainer{}
@ -102,15 +107,19 @@ func GetExternalContainerLists(runtime *libpod.Runtime) ([]entities.ListContaine
for _, con := range externCons { for _, con := range externCons {
listCon, err := ListStorageContainer(runtime, con) listCon, err := ListStorageContainer(runtime, con)
if err != nil { switch {
case errors.Cause(err) == types.ErrLoadError:
continue
case err != nil:
return nil, err return nil, err
default:
pss = append(pss, listCon)
} }
pss = append(pss, listCon)
} }
return pss, nil 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. // locks.
func ListContainerBatch(rt *libpod.Runtime, ctr *libpod.Container, opts entities.ContainerListOptions) (entities.ListContainer, error) { func ListContainerBatch(rt *libpod.Runtime, ctr *libpod.Container, opts entities.ContainerListOptions) (entities.ListContainer, error) {
var ( var (