Skip to content

Commit 7216ae1

Browse files
committed
Return a CompletableFuture from BulkIngester.flush method
1 parent 64ec619 commit 7216ae1

File tree

1 file changed

+16
-9
lines changed
  • java-client/src/main/java/co/elastic/clients/elasticsearch/_helpers/bulk

1 file changed

+16
-9
lines changed

Diff for: java-client/src/main/java/co/elastic/clients/elasticsearch/_helpers/bulk/BulkIngester.java

+16-9
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@
3535
import java.util.ArrayList;
3636
import java.util.Collections;
3737
import java.util.List;
38-
import java.util.concurrent.CompletionStage;
3938
import java.util.concurrent.Executors;
4039
import java.util.concurrent.ScheduledExecutorService;
4140
import java.util.concurrent.ScheduledFuture;
4241
import java.util.concurrent.TimeUnit;
42+
import java.util.concurrent.CompletableFuture;
4343
import java.util.concurrent.atomic.AtomicInteger;
4444
import java.util.concurrent.locks.ReentrantLock;
4545
import java.util.function.Function;
@@ -80,9 +80,9 @@ private static class RequestExecution<Context> {
8080
public final long id;
8181
public final BulkRequest request;
8282
public final List<Context> contexts;
83-
public final CompletionStage<BulkResponse> futureResponse;
83+
public final CompletableFuture<BulkResponse> futureResponse;
8484

85-
RequestExecution(long id, BulkRequest request, List<Context> contexts, CompletionStage<BulkResponse> futureResponse) {
85+
RequestExecution(long id, BulkRequest request, List<Context> contexts, CompletableFuture<BulkResponse> futureResponse) {
8686
this.id = id;
8787
this.request = request;
8888
this.contexts = contexts;
@@ -99,7 +99,7 @@ private BulkIngester(Builder<Context> builder) {
9999
this.maxOperations = builder.bulkOperations < 0 ? Integer.MAX_VALUE : builder.bulkOperations;
100100
this.listener = builder.listener;
101101
this.flushIntervalMillis = builder.flushIntervalMillis;
102-
102+
103103
if (flushIntervalMillis != null) {
104104
long flushInterval = flushIntervalMillis;
105105

@@ -119,7 +119,7 @@ private BulkIngester(Builder<Context> builder) {
119119
// It's not ours, we will not close it.
120120
scheduler = builder.scheduler;
121121
}
122-
122+
123123
this.flushTask = scheduler.scheduleWithFixedDelay(
124124
this::failsafeFlush,
125125
flushInterval, flushInterval,
@@ -271,7 +271,11 @@ private void failsafeFlush() {
271271
}
272272
}
273273

274-
public void flush() {
274+
/**
275+
* @return A future of the response, or null if there was no operations to execute.
276+
*/
277+
@Nullable
278+
public CompletableFuture<BulkResponse> flush() {
275279
RequestExecution<Context> exec = sendRequestCondition.whenReadyIf(
276280
() -> {
277281
// May happen on manual and periodic flushes
@@ -294,7 +298,7 @@ public void flush() {
294298
listener.beforeBulk(id, request, requestContexts);
295299
}
296300

297-
CompletionStage<BulkResponse> result = client.bulk(request);
301+
CompletableFuture<BulkResponse> result = client.bulk(request);
298302
requestsInFlightCount++;
299303

300304
if (listener == null) {
@@ -327,7 +331,11 @@ public void flush() {
327331
}
328332
return null;
329333
});
334+
335+
return exec.futureResponse;
330336
}
337+
338+
return null;
331339
}
332340

333341
public void add(BulkOperation operation, Context context) {
@@ -483,7 +491,7 @@ public Builder<Context> flushInterval(long value, TimeUnit unit) {
483491
/**
484492
* Sets an interval flushing any bulk actions pending if the interval passes. Defaults to not set.
485493
* <p>
486-
* Flushing is still subject to the maximum number of requests set with {@link #maxConcurrentRequests}.
494+
* Flushing is still subject to the maximum number of requests set with {@link #maxConcurrentRequests}.
487495
*/
488496
public Builder<Context> flushInterval(long value, TimeUnit unit, ScheduledExecutorService scheduler) {
489497
this.scheduler = scheduler;
@@ -528,4 +536,3 @@ public BulkIngester<Context> build() {
528536
}
529537
}
530538
}
531-

0 commit comments

Comments
 (0)