Merge pull request #111894 from wongma7/pvcnpd

Fix PVC nil pointer dereference during migration-enabled volume expand
This commit is contained in:
Kubernetes Prow Robot 2022-08-23 20:08:37 -07:00 committed by GitHub
commit 69136c0c81
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 12 deletions

View File

@ -220,18 +220,18 @@ func (expc *expandController) syncHandler(ctx context.Context, key string) error
return nil return nil
} }
if err != 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 return err
} }
pv, err := expc.getPersistentVolume(ctx, pvc) pv, err := expc.getPersistentVolume(ctx, pvc)
if err != nil { 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 return err
} }
if pv.Spec.ClaimRef == nil || pvc.Namespace != pv.Spec.ClaimRef.Namespace || pvc.UID != pv.Spec.ClaimRef.UID { 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) klog.V(4).Infof("%v", err)
return err return err
} }
@ -249,7 +249,7 @@ func (expc *expandController) syncHandler(ctx context.Context, key string) error
volumeSpec := volume.NewSpecFromPersistentVolume(pv, false) volumeSpec := volume.NewSpecFromPersistentVolume(pv, false)
migratable, err := expc.csiMigratedPluginManager.IsMigratable(volumeSpec) migratable, err := expc.csiMigratedPluginManager.IsMigratable(volumeSpec)
if err != nil { 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 return nil
} }
// handle CSI migration scenarios before invoking FindExpandablePluginBySpec for in-tree // 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) expc.recorder.Event(pvc, v1.EventTypeNormal, events.ExternalExpanding, msg)
csiResizerName, err := expc.translator.GetCSINameFromInTreeName(inTreePluginName) csiResizerName, err := expc.translator.GetCSINameFromInTreeName(inTreePluginName)
if err != nil { 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) expc.recorder.Event(pvc, v1.EventTypeWarning, events.ExternalExpanding, errorMsg)
return fmt.Errorf(errorMsg) return fmt.Errorf(errorMsg)
} }
pvc, err := util.SetClaimResizer(pvc, csiResizerName, expc.kubeClient) pvc, err := util.SetClaimResizer(pvc, csiResizerName, expc.kubeClient)
if err != nil { 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) expc.recorder.Event(pvc, v1.EventTypeWarning, events.ExternalExpanding, errorMsg)
return fmt.Errorf(errorMsg) return fmt.Errorf(errorMsg)
} }
@ -287,7 +287,7 @@ func (expc *expandController) syncHandler(ctx context.Context, key string) error
eventType = v1.EventTypeWarning eventType = v1.EventTypeWarning
} }
expc.recorder.Event(pvc, eventType, events.ExternalExpanding, fmt.Sprintf("Ignoring the PVC: %v.", msg)) 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 // If we are expecting that an external plugin will handle resizing this volume then
// is no point in requeuing this PVC. // is no point in requeuing this PVC.
return nil return nil

View File

@ -54,11 +54,6 @@ type resizeProcessStatus struct {
processed bool 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 // UpdatePVSize updates just pv size after cloudprovider resizing is successful
func UpdatePVSize( func UpdatePVSize(
pv *v1.PersistentVolume, pv *v1.PersistentVolume,