code: func (ctrl *PersistentVolumeController) setClaimProvisioner(claim *v1.PersistentVolumeClaim, provisionerName string) (*v1.PersistentVolumeClaim, error) {
  	if val, ok := claim.Annotations[annStorageProvisioner]; ok && val == provisionerName {
  		// annotation is already set, nothing to do
  		return claim, nil
  	}
  
  	// The volume from method args can be pointing to watcher cache. We must not
  	// modify these, therefore create a copy.
  	claimClone := claim.DeepCopy()
  	metav1.SetMetaDataAnnotation(&claimClone.ObjectMeta, annStorageProvisioner, provisionerName)
  	newClaim, err := ctrl.kubeClient.CoreV1().PersistentVolumeClaims(claim.Namespace).Update(claimClone)
  	if err != nil {
  		return newClaim, err
  	}
  	_, err = ctrl.storeClaimUpdate(newClaim)
  	if err != nil {
  		return newClaim, err
  	}
  	return newClaim, nil
  }
docs: // setClaimProvisioner saves
  // claim.Annotations[annStorageProvisioner] = class.Provisioner