code: func (ctrl *PersistentVolumeController) doDeleteVolume(volume *v1.PersistentVolume) (string, bool, error) {
  	klog.V(4).Infof("doDeleteVolume [%s]", volume.Name)
  	var err error
  
  	plugin, err := ctrl.findDeletablePlugin(volume)
  	if err != nil {
  		return "", false, err
  	}
  	if plugin == nil {
  		// External deleter is requested, do nothing
  		klog.V(3).Infof("external deleter for volume %q requested, ignoring", volume.Name)
  		return "", false, nil
  	}
  
  	// Plugin found
  	pluginName := plugin.GetPluginName()
  	klog.V(5).Infof("found a deleter plugin %q for volume %q", pluginName, volume.Name)
  	spec := vol.NewSpecFromPersistentVolume(volume, false)
  	deleter, err := plugin.NewDeleter(spec)
  	if err != nil {
  		// Cannot create deleter
  		return pluginName, false, fmt.Errorf("Failed to create deleter for volume %q: %v", volume.Name, err)
  	}
  
  	opComplete := util.OperationCompleteHook(pluginName, "volume_delete")
  	err = deleter.Delete()
  	opComplete(&err)
  	if err != nil {
  		// Deleter failed
  		return pluginName, false, err
  	}
  
  	klog.V(2).Infof("volume %q deleted", volume.Name)
  	return pluginName, true, nil
  }
docs: // doDeleteVolume finds appropriate delete plugin and deletes given volume, returning
  // the volume plugin name. Also, it returns 'true', when the volume was deleted and
  // 'false' when the volume cannot be deleted because the deleter is external. No
  // error should be reported in this case.