private void fetchNewElements(final long initialRemainingElements) { final long bulkSize = bulkSize(initialRemainingElements); final Query<T> query = (lastId == null ? seedQuery : seedQuery.withPredicates(ListUtils.listOf(seedQuery.predicates(), QueryPredicate.of(format("id > \"%s\"", lastId))))).withLimit(bulkSize); try { final List<T> results = sphereClient.execute(query).toCompletableFuture().join().getResults(); if (results.size() == 0) { executor.execute(() -> { subscriber.onComplete(); cancel(); }); } else { final T t = results.get(results.size() - 1); lastId = idExtractor.apply(t); final Queue<T> queue = new LinkedList<>(results); final long stillmissingCount = feedFromQueue(initialRemainingElements, queue); elementsQueue = queue; if (stillmissingCount > 0) { fetchNewElements(stillmissingCount); } } } catch (final CompletionException e) { cancel(); subscriber.onError(e); } }
private void fetchNewElements() { final QueryPredicate<T> idIsGreaterThanLastIdPredicate = QueryPredicate.of(format("id > \"%s\"", lastId)); final Query<T> query = lastId == null ? seedQuery : seedQuery.withPredicates(ListUtils.listOf(seedQuery.predicates(), idIsGreaterThanLastIdPredicate)); sphereClient.execute(query).whenComplete((r, e) -> { executor.execute(() -> {