Skip to content

Commit

Permalink
Merge pull request containers#10942 from vrothberg/fix-10935
Browse files Browse the repository at this point in the history
podman start: remove containers configured for auto removal
  • Loading branch information
openshift-merge-robot authored Jul 16, 2021
2 parents f0cd16c + 9924c57 commit 3ba9f2a
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 28 deletions.
47 changes: 29 additions & 18 deletions pkg/domain/infra/abi/containers.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,24 @@ func (ic *ContainerEngine) ContainerRestart(ctx context.Context, namesOrIds []st
return reports, nil
}

func (ic *ContainerEngine) removeContainer(ctx context.Context, ctr *libpod.Container, options entities.RmOptions) error {
err := ic.Libpod.RemoveContainer(ctx, ctr, options.Force, options.Volumes)
if err == nil {
return nil
}
logrus.Debugf("Failed to remove container %s: %s", ctr.ID(), err.Error())
switch errors.Cause(err) {
case define.ErrNoSuchCtr:
if options.Ignore {
logrus.Debugf("Ignoring error (--allow-missing): %v", err)
return nil
}
case define.ErrCtrRemoved:
return nil
}
return err
}

func (ic *ContainerEngine) ContainerRm(ctx context.Context, namesOrIds []string, options entities.RmOptions) ([]*entities.RmReport, error) {
reports := []*entities.RmReport{}

Expand Down Expand Up @@ -318,21 +336,7 @@ func (ic *ContainerEngine) ContainerRm(ctx context.Context, namesOrIds []string,
}

errMap, err := parallelctr.ContainerOp(ctx, ctrs, func(c *libpod.Container) error {
err := ic.Libpod.RemoveContainer(ctx, c, options.Force, options.Volumes)
if err == nil {
return nil
}
logrus.Debugf("Failed to remove container %s: %s", c.ID(), err.Error())
switch errors.Cause(err) {
case define.ErrNoSuchCtr:
if options.Ignore {
logrus.Debugf("Ignoring error (--allow-missing): %v", err)
return nil
}
case define.ErrCtrRemoved:
return nil
}
return err
return ic.removeContainer(ctx, c, options)
})
if err != nil {
return nil, err
Expand Down Expand Up @@ -791,6 +795,11 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri
Err: err,
ExitCode: exitCode,
})
if ctr.AutoRemove() {
if err := ic.removeContainer(ctx, ctr, entities.RmOptions{}); err != nil {
logrus.Errorf("Error removing container %s: %v", ctr.ID(), err)
}
}
return reports, errors.Wrapf(err, "unable to start container %s", ctr.ID())
}

Expand Down Expand Up @@ -827,9 +836,6 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri
ExitCode: 125,
}
if err := ctr.Start(ctx, true); err != nil {
// if lastError != nil {
// fmt.Fprintln(os.Stderr, lastError)
// }
report.Err = err
if errors.Cause(err) == define.ErrWillDeadlock {
report.Err = errors.Wrapf(err, "please run 'podman system renumber' to resolve deadlocks")
Expand All @@ -838,6 +844,11 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri
}
report.Err = errors.Wrapf(err, "unable to start container %q", ctr.ID())
reports = append(reports, report)
if ctr.AutoRemove() {
if err := ic.removeContainer(ctx, ctr, entities.RmOptions{}); err != nil {
logrus.Errorf("Error removing container %s: %v", ctr.ID(), err)
}
}
continue
}
report.ExitCode = 0
Expand Down
26 changes: 17 additions & 9 deletions pkg/domain/infra/tunnel/containers.go
Original file line number Diff line number Diff line change
Expand Up @@ -541,6 +541,17 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri
return nil, err
}
removeOptions := new(containers.RemoveOptions).WithVolumes(true).WithForce(false)
removeContainer := func(id string) {
if err := containers.Remove(ic.ClientCtx, id, removeOptions); err != nil {
if errorhandling.Contains(err, define.ErrNoSuchCtr) ||
errorhandling.Contains(err, define.ErrCtrRemoved) {
logrus.Debugf("Container %s does not exist: %v", id, err)
} else {
logrus.Errorf("Error removing container %s: %v", id, err)
}
}
}

// There can only be one container if attach was used
for i, ctr := range ctrs {
name := ctr.ID
Expand Down Expand Up @@ -568,6 +579,9 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri
}

if err != nil {
if ctr.AutoRemove {
removeContainer(ctr.ID)
}
report.ExitCode = define.ExitCode(report.Err)
report.Err = err
reports = append(reports, &report)
Expand All @@ -582,16 +596,10 @@ func (ic *ContainerEngine) ContainerStart(ctx context.Context, namesOrIds []stri
logrus.Errorf("Failed to check if %s should restart: %v", ctr.ID, err)
return
}
logrus.Errorf("Should restart: %v", shouldRestart)

if !shouldRestart {
if err := containers.Remove(ic.ClientCtx, ctr.ID, removeOptions); err != nil {
if errorhandling.Contains(err, define.ErrNoSuchCtr) ||
errorhandling.Contains(err, define.ErrCtrRemoved) {
logrus.Debugf("Container %s does not exist: %v", ctr.ID, err)
} else {
logrus.Errorf("Error removing container %s: %v", ctr.ID, err)
}
}
if !shouldRestart && ctr.AutoRemove {
removeContainer(ctr.ID)
}
}()
}
Expand Down
1 change: 0 additions & 1 deletion test/e2e/start_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ var _ = Describe("Podman start", func() {
})

It("podman start --rm --attach removed on failure", func() {
Skip("FIXME: #10935, race condition removing container")
session := podmanTest.Podman([]string{"create", "--rm", ALPINE, "foo"})
session.WaitWithDefaultTimeout()
Expect(session).Should(Exit(0))
Expand Down

0 comments on commit 3ba9f2a

Please sign in to comment.