Skip to content

Commit fbbf15c

Browse files
committed
DeviceManager: Return no error if the device not found while deleting
Discussion on issue intel#413, raised a requirement that PMEM-CSI should handle the DeleteVolume() call for volumes that the underlined device already deleted manually by the admin. So for such a volume we just ignore and return no error in DeviceManager.DeleteVolume(). This also makes DeleteVolume() idempotent.
1 parent e790454 commit fbbf15c

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

pkg/pmem-device-manager/pmd-lvm.go

+6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package pmdmanager
22

33
import (
44
"fmt"
5+
"os"
56
"strconv"
67
"strings"
78
"sync"
@@ -157,6 +158,11 @@ func (lvm *pmemLvm) DeleteDevice(name string, flush bool) error {
157158
return err
158159
}
159160
if err := ClearDevice(device, flush); err != nil {
161+
if os.IsNotExist(err) {
162+
// Remove device from cache
163+
delete(lvm.devices, name)
164+
return nil
165+
}
160166
return err
161167
}
162168

pkg/pmem-device-manager/pmd-ndctl.go

+10-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package pmdmanager
22

33
import (
44
"fmt"
5+
"os"
56
"sync"
67

78
"github.com/intel/pmem-csi/pkg/ndctl"
@@ -143,12 +144,18 @@ func (pmem *pmemNdctl) DeleteDevice(name string, flush bool) error {
143144

144145
device, err := pmem.getDevice(name)
145146
if err != nil {
146-
return err
147+
// Assume not found device as already deleted
148+
// and return no error
149+
return nil
147150
}
148-
err = ClearDevice(device, flush)
149-
if err != nil {
151+
if err := ClearDevice(device, flush); err != nil {
152+
// Device might have already deleted
153+
if os.IsNotExist(err) {
154+
return nil
155+
}
150156
return err
151157
}
158+
152159
return pmem.ctx.DestroyNamespaceByName(name)
153160
}
154161

0 commit comments

Comments
 (0)