code: func (dswp *desiredStateOfWorldPopulator) getPVCExtractPV(
  	namespace string, claimName string) (*v1.PersistentVolumeClaim, error) {
  	pvc, err :=
  		dswp.kubeClient.CoreV1().PersistentVolumeClaims(namespace).Get(claimName, metav1.GetOptions{})
  	if err != nil || pvc == nil {
  		return nil, fmt.Errorf(
  			"failed to fetch PVC %s/%s from API server. err=%v",
  			namespace,
  			claimName,
  			err)
  	}
  
  	if utilfeature.DefaultFeatureGate.Enabled(features.StorageObjectInUseProtection) {
  		// Pods that uses a PVC that is being deleted must not be started.
  		//
  		// In case an old kubelet is running without this check or some kubelets
  		// have this feature disabled, the worst that can happen is that such
  		// pod is scheduled. This was the default behavior in 1.8 and earlier
  		// and users should not be that surprised.
  		// It should happen only in very rare case when scheduler schedules
  		// a pod and user deletes a PVC that's used by it at the same time.
  		if pvc.ObjectMeta.DeletionTimestamp != nil {
  			return nil, fmt.Errorf(
  				"can't start pod because PVC %s/%s is being deleted",
  				namespace,
  				claimName)
  		}
  	}
  
  	if pvc.Status.Phase != v1.ClaimBound || pvc.Spec.VolumeName == "" {
  
  		return nil, fmt.Errorf(
  			"PVC %s/%s has non-bound phase (%q) or empty pvc.Spec.VolumeName (%q)",
  			namespace,
  			claimName,
  			pvc.Status.Phase,
  			pvc.Spec.VolumeName)
  	}
  
  	return pvc, nil
  }
docs: // getPVCExtractPV fetches the PVC object with the given namespace and name from
  // the API server, checks whether PVC is being deleted, extracts the name of the PV
  // it is pointing to and returns it.
  // An error is returned if the PVC object's phase is not "Bound".