docs: public static <V> V callWithRetries(
        int nAttempts,
        int initialRetrySec,
        Callable<V> action,
        IPredicate<Exception> retryableException)
        throws Exception {
      int retryDelaySec = initialRetrySec;
      for (int attemptsLeftAfterThis = nAttempts - 1;
          attemptsLeftAfterThis >= 0;
          attemptsLeftAfterThis--) {
        try {
          return action.call();
        } catch (Exception e) {
          if (!retryableException.test(e)) {
            throw e;
          }
          if (attemptsLeftAfterThis <= 0) {
            throw new RuntimeException("Ultimately failed after " + nAttempts + " attempts.", e);
          }
          log.warn("Failed; {} attempts left: {}", e.toString(), attemptsLeftAfterThis);
        }
        retryDelaySec = pauseAndIncrease(retryDelaySec);
      }
      throw new RuntimeException("Failed; total attempts allowed: " + nAttempts);
    }