Bug 1993249

Summary: Make volume removal with third-party drivers consistent with Docker behavior
Product: Red Hat Enterprise Linux 8 Reporter: Robb Manes <rmanes>
Component: podmanAssignee: Jindrich Novy <jnovy>
Status: CLOSED ERRATA QA Contact: Joy Pu <ypu>
Severity: medium Docs Contact:
Priority: medium    
Version: 8.4CC: bbaude, dornelas, dwalsh, jligon, jnovy, lsm5, mheon, pthomas, tsweeney, umohnani, ypu
Target Milestone: beta   
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: podman-3.3.1-1.el8 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2021-11-09 17:40:16 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 1186913, 1934612    

Description Robb Manes 2021-08-12 15:47:23 UTC
Description of problem:
This problem is being tracked in https://github.com/containers/podman/issues/11214.

When using third-party volume drivers, if the volume driver returns an error when removing a volume (such as with podman volume rm) podman will remove the volume entry despite the error. This is different behavior than Docker or Moby, which instead returns the error and makes no changes to the volume.

The error message looks something like this:

# podman volume rm docvol1
Error: volume docvol1 could not be removed from plugin MYPLUGIN, but it has been removed from Podman: MYPLUGIN had some sort of error

Podman's behavior: https://github.com/containers/podman/blob/main/libpod/runtime_volume_linux.go#L286-L292

Moby's behavior: https://github.com/moby/moby/blob/master/volume/drivers/proxy.go#L71-L73

While it's probably good to clean this up, this is a difference in what some volume plugins expect to happen, so we've had volume driver providers reach out and ask for this behavior to be uniform across podman and Docker.


Version-Release number of selected component (if applicable):
podman-3.2.3-0.10.module+el8.4.0+11989+6676f7ad.x86_64

How reproducible:
Every time

Actual results:
Volume is removed from podman boltdb despite error.

Expected results:
Volume should not be removed in case of error to match Docker/Moby behavior.

Additional info:
Those looking for latest information on the state of fixing this bug should look to the above mentioned Github issue.

Comment 1 Matthew Heon 2021-08-12 15:48:44 UTC
I'll take this

Comment 2 Matthew Heon 2021-08-18 18:24:27 UTC
https://github.com/containers/podman/pull/11267 will fix this upstream.

I believe we still have time to land this before 3.3.0 final, so it should be in RHEL 8.5.0.

Comment 3 Tom Sweeney 2021-08-20 18:13:42 UTC
Just verified that this commit: https://github.com/containers/podman/commit/f0d0c48d2e38a6a34e687ef8c75caef30790bcdd has the fix in the v3.3 stream

Comment 15 Joy Pu 2021-09-01 16:56:47 UTC
Test with podman-3.3.1-7.module+el8.5.0+12442+516c7b38.x86_64 with a modified version of testvol. And it works as expected.
# podman volume rm testVolume1
Error: volume testVolume1 could not be removed from plugin testvol4: error on /VolumeDriver.Remove on volume testVolume1 in volume plugin testvol4: Raise error for testing
# podman volume ls
DRIVER      VOLUME NAME
testvol4    testVolume1

Comment 18 errata-xmlrpc 2021-11-09 17:40:16 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (Moderate: container-tools:rhel8 security, bug fix, and enhancement update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHSA-2021:4154