code: public boolean canRetryOn(Throwable failure) {
      Assert.notNull(failure, "failure");
      return !postExecute(new ExecutionResult(null, failure));
    }
docs: Records an execution and returns true if a retry can be performed for the {@code failure}, else returns false and
  marks the execution as complete.
  
  @throws NullPointerException if {@code failure} is null
  @throws IllegalStateException if the execution is already complete