Skip to content

Commit 9b11bec

Browse files
fix(controller): remove finaliser in controller if k8s node owning the volume is not present
Signed-off-by: Abhilash Shetty <[email protected]>
1 parent 1d74211 commit 9b11bec

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

pkg/driver/controller.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
corev1 "k8s.io/api/core/v1"
1919
k8serror "k8s.io/apimachinery/pkg/api/errors"
2020
apimeta "k8s.io/apimachinery/pkg/api/meta"
21+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2122
"k8s.io/apimachinery/pkg/labels"
2223
kubeinformers "k8s.io/client-go/informers"
2324
"k8s.io/client-go/kubernetes"
@@ -393,6 +394,28 @@ func (cs *controller) DeleteVolume(
393394
return csipayload.NewDeleteVolumeResponseBuilder().Build(), nil
394395
}
395396

397+
// Checks if k8s node is present. If the check fails with any other reason then NotFound.
398+
// We will return true and assume node is present.
399+
func isNodePresent(nodeId string) bool {
400+
cfg, err := k8sapi.Config().Get()
401+
if err != nil {
402+
return true
403+
}
404+
405+
kubeClient, err := kubernetes.NewForConfig(cfg)
406+
if err != nil {
407+
return true
408+
}
409+
410+
_, err = kubeClient.CoreV1().Nodes().Get(context.TODO(), nodeId, metav1.GetOptions{})
411+
if err != nil {
412+
if k8serror.IsNotFound(err) {
413+
return false
414+
}
415+
}
416+
return true
417+
}
418+
396419
func (cs *controller) deleteVolume(ctx context.Context, volumeID string) error {
397420
klog.Infof("received request to delete volume %q", volumeID)
398421
vol, err := lvm.GetLVMVolume(volumeID)
@@ -403,7 +426,6 @@ func (cs *controller) deleteVolume(ctx context.Context, volumeID string) error {
403426
return errors.Wrapf(err,
404427
"failed to get volume for {%s}", volumeID)
405428
}
406-
407429
// if volume is not already triggered for deletion, delete the volume.
408430
// otherwise, just wait for the existing deletion operation to complete.
409431
if vol.GetDeletionTimestamp() == nil {
@@ -412,6 +434,14 @@ func (cs *controller) deleteVolume(ctx context.Context, volumeID string) error {
412434
"failed to handle delete volume request for {%s}", volumeID)
413435
}
414436
}
437+
present := isNodePresent(vol.Spec.OwnerNodeID)
438+
if !present {
439+
klog.Infof("Removing finalizer as node %s is not present in cluster", vol.Spec.OwnerNodeID)
440+
if err = lvm.RemoveVolFinalizer(vol); err != nil {
441+
return nil
442+
}
443+
}
444+
415445
if err = lvm.WaitForLVMVolumeDestroy(ctx, volumeID); err != nil {
416446
return err
417447
}

pkg/lvm/volume.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func ProvisionVolume(vol *apis.LVMVolume) (*apis.LVMVolume, error) {
103103
func DeleteVolume(volumeID string) (err error) {
104104
err = volbuilder.NewKubeclient().WithNamespace(LvmNamespace).Delete(volumeID)
105105
if err == nil {
106-
klog.Infof("deprovisioned volume %s", volumeID)
106+
klog.Infof("deprovisioning volume %s, marking deletion timestamp", volumeID)
107107
}
108108

109109
return
@@ -218,6 +218,9 @@ func RemoveVolFinalizer(vol *apis.LVMVolume) error {
218218
vol.Finalizers = nil
219219

220220
_, err := volbuilder.NewKubeclient().WithNamespace(LvmNamespace).Update(vol)
221+
if err != nil {
222+
klog.Infof("Finalizer removed successfully for %s", vol.Name)
223+
}
221224
return err
222225
}
223226

0 commit comments

Comments
 (0)