Skip to content

Commit 2d924f2

Browse files
committed
fix: only remove root of SubDir when OnDelete is deleteRootSubDir
1 parent 427c416 commit 2d924f2

File tree

5 files changed

+43
-21
lines changed

5 files changed

+43
-21
lines changed

pkg/nfs/controllerserver.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -292,15 +292,16 @@ func (cs *ControllerServer) DeleteVolume(ctx context.Context, req *csi.DeleteVol
292292
}
293293
klog.V(2).Infof("archived subdirectory %s --> %s", internalVolumePath, archivedInternalVolumePath)
294294
} else {
295-
rootDir := getRootDir(nfsVol.subDir)
296-
if rootDir != "" {
297-
rootDir = filepath.Join(getInternalMountPath(cs.Driver.workingMountDir, nfsVol), rootDir)
298-
} else {
299-
rootDir = internalVolumePath
295+
deleteDir := internalVolumePath
296+
if strings.EqualFold(nfsVol.onDelete, deleteRootSubDir) {
297+
rootDir := getRootDir(nfsVol.subDir)
298+
if rootDir != "" {
299+
deleteDir = filepath.Join(getInternalMountPath(cs.Driver.workingMountDir, nfsVol), rootDir)
300+
}
300301
}
301302
// delete subdirectory under base-dir
302-
klog.V(2).Infof("removing subdirectory at %v on internalVolumePath %s", rootDir, internalVolumePath)
303-
if err = os.RemoveAll(rootDir); err != nil {
303+
klog.V(2).Infof("removing subdirectory at %v on internalVolumePath %s", deleteDir, internalVolumePath)
304+
if err = os.RemoveAll(deleteDir); err != nil {
304305
return nil, status.Errorf(codes.Internal, "delete subdirectory(%s) failed with %v", internalVolumePath, err)
305306
}
306307
}

pkg/nfs/controllerserver_test.go

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,20 @@ import (
3838
)
3939

4040
const (
41-
testServer = "test-server"
42-
testBaseDir = "test-base-dir"
43-
testBaseDirNested = "test/base/dir"
44-
testCSIVolume = "volume-name"
45-
testVolumeID = "test-server/test-base-dir/volume-name"
46-
newTestVolumeID = "test-server#test-base-dir#volume-name##"
47-
newTestVolumeWithVolumeID = "test-server#test-base-dir#volume-name#volume-name#"
48-
testVolumeIDNested = "test-server/test/base/dir/volume-name"
49-
newTestVolumeIDNested = "test-server#test/base/dir#volume-name#"
50-
newTestVolumeIDUUID = "test-server#test-base-dir#volume-name#uuid"
51-
newTestVolumeOnDeleteRetain = "test-server#test-base-dir#volume-name#uuid#retain"
52-
newTestVolumeOnDeleteDelete = "test-server#test-base-dir#volume-name#uuid#delete"
53-
newTestVolumeOnDeleteArchive = "test-server#test-base-dir#volume-name##archive"
41+
testServer = "test-server"
42+
testBaseDir = "test-base-dir"
43+
testBaseDirNested = "test/base/dir"
44+
testCSIVolume = "volume-name"
45+
testVolumeID = "test-server/test-base-dir/volume-name"
46+
newTestVolumeID = "test-server#test-base-dir#volume-name##"
47+
newTestVolumeWithVolumeID = "test-server#test-base-dir#volume-name#volume-name#"
48+
testVolumeIDNested = "test-server/test/base/dir/volume-name"
49+
newTestVolumeIDNested = "test-server#test/base/dir#volume-name#"
50+
newTestVolumeIDUUID = "test-server#test-base-dir#volume-name#uuid"
51+
newTestVolumeOnDeleteRetain = "test-server#test-base-dir#volume-name#uuid#retain"
52+
newTestVolumeOnDeleteDelete = "test-server#test-base-dir#volume-name#uuid#delete"
53+
newTestVolumeOnDeleteDeleteRootSubDir = "test-server#test-base-dir#volume-name#uuid#deleterootsubdir"
54+
newTestVolumeOnDeleteArchive = "test-server#test-base-dir#volume-name##archive"
5455
)
5556

5657
func initTestController(_ *testing.T) *ControllerServer {
@@ -510,6 +511,19 @@ func TestNfsVolFromId(t *testing.T) {
510511
},
511512
expectErr: false,
512513
},
514+
{
515+
name: "valid request nested ondelete deleterootsubdir",
516+
volumeID: newTestVolumeOnDeleteDeleteRootSubDir,
517+
resp: &nfsVolume{
518+
id: newTestVolumeOnDeleteDeleteRootSubDir,
519+
server: testServer,
520+
baseDir: testBaseDir,
521+
subDir: testCSIVolume,
522+
uuid: "uuid",
523+
onDelete: "deleterootsubdir",
524+
},
525+
expectErr: false,
526+
},
513527
{
514528
name: "valid request nested ondelete archive",
515529
volumeID: newTestVolumeOnDeleteArchive,

pkg/nfs/utils.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,11 @@ const (
3939
delete = "delete"
4040
retain = "retain"
4141
archive = "archive"
42+
deleteRootSubDir = "deleteRootSubDir"
4243
volumeOperationAlreadyExistsFmt = "An operation with the given Volume ID %s already exists"
4344
)
4445

45-
var supportedOnDeleteValues = []string{"", delete, retain, archive}
46+
var supportedOnDeleteValues = []string{"", delete, retain, archive, deleteRootSubDir}
4647

4748
func validateOnDeleteValue(onDelete string) error {
4849
for _, v := range supportedOnDeleteValues {

pkg/nfs/utils_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,11 @@ func TestValidateOnDeleteValue(t *testing.T) {
334334
onDelete: "Delete",
335335
expected: nil,
336336
},
337+
{
338+
desc: "Delete value",
339+
onDelete: "DeleteRootSubDir",
340+
expected: nil,
341+
},
337342
{
338343
desc: "Archive value",
339344
onDelete: "Archive",

test/e2e/e2e_suite_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ var (
6666
"csi.storage.k8s.io/provisioner-secret-name": "mount-options",
6767
"csi.storage.k8s.io/provisioner-secret-namespace": "default",
6868
"mountPermissions": "0755",
69+
"onDelete": "deleteRootSubDir",
6970
}
7071
retainStorageClassParameters = map[string]string{
7172
"server": nfsServerAddress,

0 commit comments

Comments
 (0)