code: @CheckReturnValue
      @BackpressureSupport(BackpressureKind.FULL)
      @SchedulerSupport(SchedulerSupport.NONE)
      public final Flowable<T> retry(long times, Predicate<? super Throwable> predicate) {
          if (times < 0) {
              throw new IllegalArgumentException("times >= 0 required but it was " + times);
          }
          ObjectHelper.requireNonNull(predicate, "predicate is null");
  
          return RxJavaPlugins.onAssembly(new FlowableRetryPredicate<T>(this, times, predicate));
      }
docs: Retries at most times or until the predicate returns false, whichever happens first.
  
  <dl>
  <dt><b>Backpressure:</b></dt>
  <dd>The operator honors downstream backpressure and expects the source {@code Publisher} to honor backpressure as well.
  If this expectation is violated, the operator <em>may</em> throw an {@code IllegalStateException}.</dd>
  <dt><b>Scheduler:</b></dt>
  <dd>{@code retry} does not operate by default on a particular {@link Scheduler}.</dd>
  </dl>
  @param times the number of times to repeat
  @param predicate the predicate called with the failure Throwable and should return true to trigger a retry.
  @return the new Flowable instance