Skip to content

Commit e566876

Browse files
committed
fix: volume name mismatch on DeleteVolume
The stored PropertyCSIVolumeName is the PVC name (e.g. "pvc-xxx") while meta.Name is the full volume ID ("pool/pvc-xxx"). The delete ownership check compared these and failed with "volume name mismatch". Fix: compare stored CSI name against meta.DatasetName (the subvolume name without pool prefix) instead of meta.Name. Applied consistently across NFS, iSCSI, and SMB delete paths.
1 parent 59bc899 commit e566876

3 files changed

Lines changed: 10 additions & 10 deletions

File tree

pkg/driver/controller_iscsi.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,10 +332,9 @@ func (s *ControllerService) verifyISCSIOwnership(ctx context.Context, meta *Volu
332332
}
333333

334334
if volumeName, ok := props[nastyapi.PropertyCSIVolumeName]; ok {
335-
nameMatches := volumeName == meta.Name || (isDatasetPathVolumeID(meta.Name) && strings.HasSuffix(meta.Name, "/"+volumeName))
336-
if !nameMatches {
335+
if volumeName != meta.DatasetName {
337336
return "", false, status.Errorf(codes.FailedPrecondition,
338-
"Subvolume %s volume name mismatch (stored=%s, requested=%s)", meta.DatasetID, volumeName, meta.Name)
337+
"Subvolume %s volume name mismatch (stored=%s, requested=%s)", meta.DatasetID, volumeName, meta.DatasetName)
339338
}
340339
}
341340

pkg/driver/controller_nfs.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -415,13 +415,15 @@ func (s *ControllerService) deleteNFSVolume(ctx context.Context, meta *VolumeMet
415415
"Subvolume %s/%s is not managed by nasty-csi (managed_by=%s)", pool, subvolName, managedBy)
416416
}
417417

418-
// Verify volume name matches
418+
// Verify volume name matches — compare stored CSI name against
419+
// the subvolume name (DatasetName), not the full volume ID (Name)
420+
// which includes the pool prefix.
419421
if volumeName, ok := props[nastyapi.PropertyCSIVolumeName]; ok {
420-
if volumeName != meta.Name {
421-
klog.Errorf("Subvolume %s/%s volume name mismatch: property=%s, requested=%s", pool, subvolName, volumeName, meta.Name)
422+
if volumeName != meta.DatasetName {
423+
klog.Errorf("Subvolume %s/%s volume name mismatch: property=%s, requested=%s", pool, subvolName, volumeName, meta.DatasetName)
422424
timer.ObserveError()
423425
return nil, status.Errorf(codes.FailedPrecondition,
424-
"Subvolume %s/%s volume name mismatch (stored=%s, requested=%s)", pool, subvolName, volumeName, meta.Name)
426+
"Subvolume %s/%s volume name mismatch (stored=%s, requested=%s)", pool, subvolName, volumeName, meta.DatasetName)
425427
}
426428
}
427429

pkg/driver/controller_smb.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,10 @@ func (s *ControllerService) deleteSMBVolume(ctx context.Context, meta *VolumeMet
263263
}
264264

265265
if volumeName, ok := props[nastyapi.PropertyCSIVolumeName]; ok {
266-
nameMatches := volumeName == meta.Name || (isDatasetPathVolumeID(meta.Name) && strings.HasSuffix(meta.Name, "/"+volumeName))
267-
if !nameMatches {
266+
if volumeName != meta.DatasetName {
268267
timer.ObserveError()
269268
return nil, status.Errorf(codes.FailedPrecondition,
270-
"Subvolume %s/%s volume name mismatch (stored=%s, requested=%s)", pool, subvolName, volumeName, meta.Name)
269+
"Subvolume %s/%s volume name mismatch (stored=%s, requested=%s)", pool, subvolName, volumeName, meta.DatasetName)
271270
}
272271
}
273272

0 commit comments

Comments
 (0)