code: func (dswp *desiredStateOfWorldPopulator) getPVSpec(
  	name string,
  	pvcReadOnly bool,
  	expectedClaimUID types.UID) (*volume.Spec, string, error) {
  	pv, err := dswp.kubeClient.CoreV1().PersistentVolumes().Get(name, metav1.GetOptions{})
  	if err != nil || pv == nil {
  		return nil, "", fmt.Errorf(
  			"failed to fetch PV %q from API server. err=%v", name, err)
  	}
  
  	if pv.Spec.ClaimRef == nil {
  		return nil, "", fmt.Errorf(
  			"found PV object %q but it has a nil pv.Spec.ClaimRef indicating it is not yet bound to the claim",
  			name)
  	}
  
  	if pv.Spec.ClaimRef.UID != expectedClaimUID {
  		return nil, "", fmt.Errorf(
  			"found PV object %q but its pv.Spec.ClaimRef.UID (%q) does not point to claim.UID (%q)",
  			name,
  			pv.Spec.ClaimRef.UID,
  			expectedClaimUID)
  	}
  
  	volumeGidValue := getPVVolumeGidAnnotationValue(pv)
  	return volume.NewSpecFromPersistentVolume(pv, pvcReadOnly), volumeGidValue, nil
  }
docs: // getPVSpec fetches the PV object with the given name from the API server
  // and returns a volume.Spec representing it.
  // An error is returned if the call to fetch the PV object fails.