code: func (ctrl *PersistentVolumeController) scheduleOperation(operationName string, operation func() error) {
  	klog.V(4).Infof("scheduleOperation[%s]", operationName)
  
  	// Poke test code that an operation is just about to get started.
  	if ctrl.preOperationHook != nil {
  		ctrl.preOperationHook(operationName)
  	}
  
  	err := ctrl.runningOperations.Run(operationName, operation)
  	if err != nil {
  		switch {
  		case goroutinemap.IsAlreadyExists(err):
  			klog.V(4).Infof("operation %q is already running, skipping", operationName)
  		case exponentialbackoff.IsExponentialBackoff(err):
  			klog.V(4).Infof("operation %q postponed due to exponential backoff", operationName)
  		default:
  			klog.Errorf("error scheduling operation %q: %v", operationName, err)
  		}
  	}
  }
docs: // scheduleOperation starts given asynchronous operation on given volume. It
  // makes sure the operation is already not running.