code: func (ctrl *PersistentVolumeController) reclaimVolume(volume *v1.PersistentVolume) error {
  	switch volume.Spec.PersistentVolumeReclaimPolicy {
  	case v1.PersistentVolumeReclaimRetain:
  		klog.V(4).Infof("reclaimVolume[%s]: policy is Retain, nothing to do", volume.Name)
  
  	case v1.PersistentVolumeReclaimRecycle:
  		klog.V(4).Infof("reclaimVolume[%s]: policy is Recycle", volume.Name)
  		opName := fmt.Sprintf("recycle-%s[%s]", volume.Name, string(volume.UID))
  		ctrl.scheduleOperation(opName, func() error {
  			ctrl.recycleVolumeOperation(volume)
  			return nil
  		})
  
  	case v1.PersistentVolumeReclaimDelete:
  		klog.V(4).Infof("reclaimVolume[%s]: policy is Delete", volume.Name)
  		opName := fmt.Sprintf("delete-%s[%s]", volume.Name, string(volume.UID))
  		startTime := time.Now()
  		ctrl.scheduleOperation(opName, func() error {
  			pluginName, err := ctrl.deleteVolumeOperation(volume)
  			timeTaken := time.Since(startTime).Seconds()
  			metrics.RecordVolumeOperationMetric(pluginName, "delete", timeTaken, err)
  			return err
  		})
  
  	default:
  		// Unknown PersistentVolumeReclaimPolicy
  		if _, err := ctrl.updateVolumePhaseWithEvent(volume, v1.VolumeFailed, v1.EventTypeWarning, "VolumeUnknownReclaimPolicy", "Volume has unrecognized PersistentVolumeReclaimPolicy"); err != nil {
  			return err
  		}
  	}
  	return nil
  }
docs: // reclaimVolume implements volume.Spec.PersistentVolumeReclaimPolicy and
  // starts appropriate reclaim action.