code: func RetryOnConflict(backoff wait.Backoff, fn func() error) error {
  	var lastConflictErr error
  	err := wait.ExponentialBackoff(backoff, func() (bool, error) {
  		err := fn()
  		switch {
  		case err == nil:
  			return true, nil
  		case errors.IsConflict(err):
  			lastConflictErr = err
  			return false, nil
  		default:
  			return false, err
  		}
  	})
  	if err == wait.ErrWaitTimeout {
  		err = lastConflictErr
  	}
  	return err
  }
docs: // RetryConflict executes the provided function repeatedly, retrying if the server returns a conflicting
  // write. Callers should preserve previous executions if they wish to retry changes. It performs an
  // exponential backoff.
  //
  //     var pod *api.Pod
  //     err := RetryOnConflict(DefaultBackoff, func() (err error) {
  //       pod, err = c.Pods("mynamespace").UpdateStatus(podStatus)
  //       return
  //     })
  //     if err != nil {
  //       // may be conflict if max retries were hit
  //       return err
  //     }
  //     ...
  //
  // TODO: Make Backoff an interface?