Drop container does not exist on removal to debugf

We have race conditions where a container can be removed
by two different processes when running podman --remove rm.

It can be cleaned up in the API or by the conmon executing
podman container cleanup.

When we fail to remove a container that does not exists we should
not be printing errors or warnings, we should just debug the fact.

[NO TESTS NEEDED] Since this is a race condition it is difficult to
test.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
Daniel J Walsh
2021-05-21 08:00:47 -04:00
committed by Matthew Heon
parent 18e917cdc3
commit ac8b7ddd8d
2 changed files with 9 additions and 6 deletions

View File

@ -275,7 +275,7 @@ func (ic *ContainerEngine) ContainerRm(ctx context.Context, namesOrIds []string,
case nil: case nil:
// remove container names that we successfully deleted // remove container names that we successfully deleted
reports = append(reports, &report) reports = append(reports, &report)
case define.ErrNoSuchCtr: case define.ErrNoSuchCtr, define.ErrCtrExists:
// There is still a potential this is a libpod container // There is still a potential this is a libpod container
tmpNames = append(tmpNames, ctr) tmpNames = append(tmpNames, ctr)
default: default:

View File

@ -21,6 +21,7 @@ import (
"github.com/containers/podman/v3/pkg/errorhandling" "github.com/containers/podman/v3/pkg/errorhandling"
"github.com/containers/podman/v3/pkg/specgen" "github.com/containers/podman/v3/pkg/specgen"
"github.com/containers/podman/v3/pkg/util" "github.com/containers/podman/v3/pkg/util"
"github.com/containers/storage/types"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
@ -580,7 +581,7 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri
if err := containers.Remove(ic.ClientCtx, ctr.ID, removeOptions); err != nil { if err := containers.Remove(ic.ClientCtx, ctr.ID, removeOptions); err != nil {
if errorhandling.Contains(err, define.ErrNoSuchCtr) || if errorhandling.Contains(err, define.ErrNoSuchCtr) ||
errorhandling.Contains(err, define.ErrCtrRemoved) { errorhandling.Contains(err, define.ErrCtrRemoved) {
logrus.Warnf("Container %s does not exist: %v", ctr.ID, err) logrus.Debugf("Container %s does not exist: %v", ctr.ID, err)
} else { } else {
logrus.Errorf("Error removing container %s: %v", ctr.ID, err) logrus.Errorf("Error removing container %s: %v", ctr.ID, err)
} }
@ -613,8 +614,9 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri
rmOptions := new(containers.RemoveOptions).WithForce(false).WithVolumes(true) rmOptions := new(containers.RemoveOptions).WithForce(false).WithVolumes(true)
if err := containers.Remove(ic.ClientCtx, ctr.ID, rmOptions); err != nil { if err := containers.Remove(ic.ClientCtx, ctr.ID, rmOptions); err != nil {
if errorhandling.Contains(err, define.ErrNoSuchCtr) || if errorhandling.Contains(err, define.ErrNoSuchCtr) ||
errorhandling.Contains(err, define.ErrCtrRemoved) { errorhandling.Contains(err, define.ErrCtrRemoved) ||
logrus.Warnf("Container %s does not exist: %v", ctr.ID, err) errorhandling.Contains(err, types.ErrLayerUnknown) {
logrus.Debugf("Container %s does not exist: %v", ctr.ID, err)
} else { } else {
logrus.Errorf("Error removing container %s: %v", ctr.ID, err) logrus.Errorf("Error removing container %s: %v", ctr.ID, err)
} }
@ -691,8 +693,9 @@ func (ic *ContainerEngine) ContainerRun(ctx context.Context, opts entities.Conta
if !shouldRestart { if !shouldRestart {
if err := containers.Remove(ic.ClientCtx, con.ID, new(containers.RemoveOptions).WithForce(false).WithVolumes(true)); err != nil { if err := containers.Remove(ic.ClientCtx, con.ID, new(containers.RemoveOptions).WithForce(false).WithVolumes(true)); err != nil {
if errorhandling.Contains(err, define.ErrNoSuchCtr) || if errorhandling.Contains(err, define.ErrNoSuchCtr) ||
errorhandling.Contains(err, define.ErrCtrRemoved) { errorhandling.Contains(err, define.ErrCtrRemoved) ||
logrus.Warnf("Container %s does not exist: %v", con.ID, err) errorhandling.Contains(err, types.ErrLayerUnknown) {
logrus.Debugf("Container %s does not exist: %v", con.ID, err)
} else { } else {
logrus.Errorf("Error removing container %s: %v", con.ID, err) logrus.Errorf("Error removing container %s: %v", con.ID, err)
} }