From a322a708f32181acded19c1453a52601b69dc70d Mon Sep 17 00:00:00 2001 From: Matthew Wong Date: Wed, 17 Aug 2022 11:32:22 -0700 Subject: [PATCH] Fix PVC nil pointer dereference during migration-enabled volume expand --- pkg/controller/volume/expand/expand_controller.go | 14 +++++++------- pkg/volume/util/resize_util.go | 5 ----- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/pkg/controller/volume/expand/expand_controller.go b/pkg/controller/volume/expand/expand_controller.go index 345d67e3ea0..ba8467e9637 100644 --- a/pkg/controller/volume/expand/expand_controller.go +++ b/pkg/controller/volume/expand/expand_controller.go @@ -220,18 +220,18 @@ func (expc *expandController) syncHandler(ctx context.Context, key string) error return nil } if err != nil { - klog.V(5).Infof("Error getting PVC %q (uid: %q) from informer : %v", util.GetPersistentVolumeClaimQualifiedName(pvc), pvc.UID, err) + klog.V(5).Infof("Error getting PVC %q from informer : %v", key, err) return err } pv, err := expc.getPersistentVolume(ctx, pvc) if err != nil { - klog.V(5).Infof("Error getting Persistent Volume for PVC %q (uid: %q) from informer : %v", util.GetPersistentVolumeClaimQualifiedName(pvc), pvc.UID, err) + klog.V(5).Infof("Error getting Persistent Volume for PVC %q (uid: %q) from informer : %v", key, pvc.UID, err) return err } if pv.Spec.ClaimRef == nil || pvc.Namespace != pv.Spec.ClaimRef.Namespace || pvc.UID != pv.Spec.ClaimRef.UID { - err := fmt.Errorf("persistent Volume is not bound to PVC being updated : %s", util.ClaimToClaimKey(pvc)) + err := fmt.Errorf("persistent Volume is not bound to PVC being updated : %s", key) klog.V(4).Infof("%v", err) return err } @@ -249,7 +249,7 @@ func (expc *expandController) syncHandler(ctx context.Context, key string) error volumeSpec := volume.NewSpecFromPersistentVolume(pv, false) migratable, err := expc.csiMigratedPluginManager.IsMigratable(volumeSpec) if err != nil { - klog.V(4).Infof("failed to check CSI migration status for PVC: %s with error: %v", util.ClaimToClaimKey(pvc), err) + klog.V(4).Infof("failed to check CSI migration status for PVC: %s with error: %v", key, err) return nil } // handle CSI migration scenarios before invoking FindExpandablePluginBySpec for in-tree @@ -264,14 +264,14 @@ func (expc *expandController) syncHandler(ctx context.Context, key string) error expc.recorder.Event(pvc, v1.EventTypeNormal, events.ExternalExpanding, msg) csiResizerName, err := expc.translator.GetCSINameFromInTreeName(inTreePluginName) if err != nil { - errorMsg := fmt.Sprintf("error getting CSI driver name for pvc %s, with error %v", util.ClaimToClaimKey(pvc), err) + errorMsg := fmt.Sprintf("error getting CSI driver name for pvc %s, with error %v", key, err) expc.recorder.Event(pvc, v1.EventTypeWarning, events.ExternalExpanding, errorMsg) return fmt.Errorf(errorMsg) } pvc, err := util.SetClaimResizer(pvc, csiResizerName, expc.kubeClient) if err != nil { - errorMsg := fmt.Sprintf("error setting resizer annotation to pvc %s, with error %v", util.ClaimToClaimKey(pvc), err) + errorMsg := fmt.Sprintf("error setting resizer annotation to pvc %s, with error %v", key, err) expc.recorder.Event(pvc, v1.EventTypeWarning, events.ExternalExpanding, errorMsg) return fmt.Errorf(errorMsg) } @@ -287,7 +287,7 @@ func (expc *expandController) syncHandler(ctx context.Context, key string) error eventType = v1.EventTypeWarning } expc.recorder.Event(pvc, eventType, events.ExternalExpanding, fmt.Sprintf("Ignoring the PVC: %v.", msg)) - klog.Infof("Ignoring the PVC %q (uid: %q) : %v.", util.GetPersistentVolumeClaimQualifiedName(pvc), pvc.UID, msg) + klog.Infof("Ignoring the PVC %q (uid: %q) : %v.", key, pvc.UID, msg) // If we are expecting that an external plugin will handle resizing this volume then // is no point in requeuing this PVC. return nil diff --git a/pkg/volume/util/resize_util.go b/pkg/volume/util/resize_util.go index 4368b5fec7f..d070f2f2962 100644 --- a/pkg/volume/util/resize_util.go +++ b/pkg/volume/util/resize_util.go @@ -54,11 +54,6 @@ type resizeProcessStatus struct { processed bool } -// ClaimToClaimKey return namespace/name string for pvc -func ClaimToClaimKey(claim *v1.PersistentVolumeClaim) string { - return fmt.Sprintf("%s/%s", claim.Namespace, claim.Name) -} - // UpdatePVSize updates just pv size after cloudprovider resizing is successful func UpdatePVSize( pv *v1.PersistentVolume,