code: private CompletableFuture<Void> executeConditionally(Function<Duration, CompletableFuture<Long>> indexOperation, Duration timeout) {
          TimeoutTimer timer = new TimeoutTimer(timeout);
          return UPDATE_RETRY
                  .runAsync(() -> executeConditionallyOnce(indexOperation, timer), this.executor)
                  .exceptionally(this::handleIndexOperationException)
                  .thenAccept(Callbacks::doNothing);
      }
docs: Executes the given Index Operation with retries. Retries are only performed in case of conditional update failures,
  represented by BadOffsetException.
  
  @param indexOperation A Function, that, when invoked, returns a CompletableFuture which indicates when the index
  operation completes.
  @param timeout        Timeout for the operation.
  @return A CompletableFuture that will indicate when the operation completes.