func()

in pkg/nfs/controllerserver.go [439:480]


func (cs *ControllerServer) DeleteSnapshot(ctx context.Context, req *csi.DeleteSnapshotRequest) (*csi.DeleteSnapshotResponse, error) {
	if len(req.GetSnapshotId()) == 0 {
		return nil, status.Error(codes.InvalidArgument, "Snapshot ID is required for deletion")
	}
	snap, err := getNfsSnapFromID(req.GetSnapshotId())
	if err != nil {
		// An invalid ID should be treated as doesn't exist
		klog.Warningf("failed to get nfs snapshot for id %v deletion: %v", req.GetSnapshotId(), err)
		return &csi.DeleteSnapshotResponse{}, nil
	}

	var volCap *csi.VolumeCapability
	mountOptions := getMountOptions(req.GetSecrets())
	if mountOptions != "" {
		klog.V(2).Infof("DeleteSnapshot: found mountOptions(%s) for snapshot(%s)", mountOptions, req.GetSnapshotId())
		volCap = &csi.VolumeCapability{
			AccessType: &csi.VolumeCapability_Mount{
				Mount: &csi.VolumeCapability_MountVolume{
					MountFlags: []string{mountOptions},
				},
			},
		}
	}
	vol := volumeFromSnapshot(snap)
	if err = cs.internalMount(ctx, vol, nil, volCap); err != nil {
		return nil, status.Errorf(codes.Internal, "failed to mount nfs server for snapshot deletion: %v", err)
	}
	defer func() {
		if err = cs.internalUnmount(ctx, vol); err != nil {
			klog.Warningf("failed to unmount nfs server after snapshot deletion: %v", err)
		}
	}()

	// delete snapshot archive
	internalVolumePath := getInternalVolumePath(cs.Driver.workingMountDir, vol)
	klog.V(2).Infof("Removing snapshot archive at %v", internalVolumePath)
	if err = os.RemoveAll(internalVolumePath); err != nil {
		return nil, status.Errorf(codes.Internal, "failed to delete subdirectory: %v", err.Error())
	}

	return &csi.DeleteSnapshotResponse{}, nil
}