mirror of https://github.com/containers/podman.git
				
				
				
			Merge pull request #14720 from sstosh/rm-option
Fix: Prevent OCI runtime directory remain
This commit is contained in:
		
						commit
						2cc3f127f4
					
				|  | @ -666,6 +666,15 @@ func (c *Container) Cleanup(ctx context.Context) error { | |||
| 		defer c.lock.Unlock() | ||||
| 
 | ||||
| 		if err := c.syncContainer(); err != nil { | ||||
| 			switch errors.Cause(err) { | ||||
| 			// When the container has already been removed, the OCI runtime directory remain.
 | ||||
| 			case define.ErrNoSuchCtr, define.ErrCtrRemoved: | ||||
| 				if err := c.cleanupRuntime(ctx); err != nil { | ||||
| 					return errors.Wrapf(err, "error cleaning up container %s from OCI runtime", c.ID()) | ||||
| 				} | ||||
| 			default: | ||||
| 				logrus.Errorf("Syncing container %s status: %v", c.ID(), err) | ||||
| 			} | ||||
| 			return err | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -1289,8 +1289,9 @@ func (c *Container) stop(timeout uint) error { | |||
| 		if err := c.syncContainer(); err != nil { | ||||
| 			switch errors.Cause(err) { | ||||
| 			// If the container has already been removed (e.g., via
 | ||||
| 			// the cleanup process), there's nothing left to do.
 | ||||
| 			// the cleanup process), set the container state to "stopped".
 | ||||
| 			case define.ErrNoSuchCtr, define.ErrCtrRemoved: | ||||
| 				c.state.State = define.ContainerStateStopped | ||||
| 				return stopErr | ||||
| 			default: | ||||
| 				if stopErr != nil { | ||||
|  |  | |||
|  | @ -715,6 +715,10 @@ func (r *Runtime) removeContainer(ctx context.Context, c *Container, force, remo | |||
| 		// Do a quick ping of the database to check if the container
 | ||||
| 		// still exists.
 | ||||
| 		if ok, _ := r.state.HasContainer(c.ID()); !ok { | ||||
| 			// When the container has already been removed, the OCI runtime directory remain.
 | ||||
| 			if err := c.cleanupRuntime(ctx); err != nil { | ||||
| 				return errors.Wrapf(err, "error cleaning up container %s from OCI runtime", c.ID()) | ||||
| 			} | ||||
| 			return nil | ||||
| 		} | ||||
| 	} | ||||
|  |  | |||
|  | @ -171,4 +171,19 @@ load helpers | |||
|     run_podman --noout stop -t 0 stopme | ||||
|     is "$output" "" "output should be empty" | ||||
| } | ||||
| 
 | ||||
| @test "podman stop, with --rm container" { | ||||
|     OCIDir=/run/$(podman_runtime) | ||||
| 
 | ||||
|     if is_rootless; then | ||||
|         OCIDir=/run/user/$(id -u)/$(podman_runtime) | ||||
|     fi | ||||
| 
 | ||||
|     run_podman run --rm -d --name rmstop $IMAGE sleep infinity | ||||
|     local cid="$output" | ||||
|     run_podman stop rmstop | ||||
| 
 | ||||
|     # Check the OCI runtime directory has removed. | ||||
|     is "$(ls $OCIDir | grep $cid)" "" "The OCI runtime directory should have been removed" | ||||
| } | ||||
| # vim: filetype=sh | ||||
|  |  | |||
|  | @ -52,10 +52,20 @@ load helpers | |||
| } | ||||
| 
 | ||||
| @test "podman rm <-> run --rm race" { | ||||
|     OCIDir=/run/$(podman_runtime) | ||||
| 
 | ||||
|     if is_rootless; then | ||||
|         OCIDir=/run/user/$(id -u)/$(podman_runtime) | ||||
|     fi | ||||
| 
 | ||||
|     # A container's lock is released before attempting to stop it.  This opens | ||||
|     # the window for race conditions that led to #9479. | ||||
|     run_podman run --rm -d $IMAGE sleep infinity | ||||
|     local cid="$output" | ||||
|     run_podman rm -af | ||||
| 
 | ||||
|     # Check the OCI runtime directory has removed. | ||||
|     is "$(ls $OCIDir | grep $cid)" "" "The OCI runtime directory should have been removed" | ||||
| } | ||||
| 
 | ||||
| @test "podman rm --depend" { | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue