@Override public void onSuccess(T value) { future.complete(value); }
public static RequestFuture<Void> voidSuccess() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); return future; }
@Override public void onSuccess(ListOffsetResult partialResult) { synchronized (listOffsetRequestsFuture) { fetchedTimestampOffsets.putAll(partialResult.fetchedOffsets); partitionsToRetry.addAll(partialResult.partitionsToRetry); if (remainingResponses.decrementAndGet() == 0 && !listOffsetRequestsFuture.isDone()) { ListOffsetResult result = new ListOffsetResult(fetchedTimestampOffsets, partitionsToRetry); listOffsetRequestsFuture.complete(result); } } }
@Override public void onSuccess(String value, RequestFuture<Integer> future) { future.complete(value.length()); } });
@Override public void onSuccess(String value, RequestFuture<Integer> future) { future.complete(value.length()); } });
@Override public void handle(LeaveGroupResponse leaveResponse, RequestFuture<Void> future) { Errors error = leaveResponse.error(); if (error == Errors.NONE) { log.debug("LeaveGroup request returned successfully"); future.complete(null); } else { log.debug("LeaveGroup request failed with error: {}", error.message()); future.raise(error); } } }
@Test(expected = IllegalArgumentException.class) public void testRuntimeExceptionInComplete() { RequestFuture<Exception> future = new RequestFuture<>(); future.complete(new RuntimeException()); }
@Test(expected = IllegalStateException.class) public void invokeCompleteAfterAlreadyFailed() { RequestFuture<Void> future = new RequestFuture<>(); future.raise(new RuntimeException()); future.complete(null); }
@Test(expected = IllegalStateException.class) public void invokeRaiseAfterAlreadyCompleted() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); future.raise(new RuntimeException()); }
@Test(expected = IllegalStateException.class) public void invokeExceptionAfterSuccess() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); future.exception(); }
public void fireCompletion() { if (e != null) { future.raise(e); } else if (response.authenticationException() != null) { future.raise(response.authenticationException()); } else if (response.wasDisconnected()) { log.debug("Cancelled request with header {} due to node {} being disconnected", response.requestHeader(), response.destination()); future.raise(DisconnectException.INSTANCE); } else if (response.versionMismatch() != null) { future.raise(response.versionMismatch()); } else { future.complete(response); } }
@Override public void onSuccess(ClientResponse resp, RequestFuture<Void> future) { log.debug("Received FindCoordinator response {}", resp); clearFindCoordinatorFuture(); FindCoordinatorResponse findCoordinatorResponse = (FindCoordinatorResponse) resp.responseBody(); Errors error = findCoordinatorResponse.error(); if (error == Errors.NONE) { synchronized (AbstractCoordinator.this) { // use MAX_VALUE - node.id as the coordinator id to allow separate connections // for the coordinator in the underlying network client layer int coordinatorConnectionId = Integer.MAX_VALUE - findCoordinatorResponse.node().id(); AbstractCoordinator.this.coordinator = new Node( coordinatorConnectionId, findCoordinatorResponse.node().host(), findCoordinatorResponse.node().port()); log.info("Discovered group coordinator {}", coordinator); client.tryConnect(coordinator); heartbeat.resetSessionTimeout(); } future.complete(null); } else if (error == Errors.GROUP_AUTHORIZATION_FAILED) { future.raise(new GroupAuthorizationException(groupId)); } else { log.debug("Group coordinator lookup failed: {}", error.message()); future.raise(error); } }
@Test public void listenerInvokedIfAddedAfterFutureCompletion() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); MockRequestFutureListener<Void> listener = new MockRequestFutureListener<>(); future.addListener(listener); assertOnSuccessInvoked(listener); }
@Test public void listenerInvokedIfAddedBeforeFutureCompletion() { RequestFuture<Void> future = new RequestFuture<>(); MockRequestFutureListener<Void> listener = new MockRequestFutureListener<>(); future.addListener(listener); future.complete(null); assertOnSuccessInvoked(listener); }
@Override public void handle(SyncGroupResponse syncResponse, RequestFuture<ByteBuffer> future) { Errors error = syncResponse.error(); if (error == Errors.NONE) { sensors.syncLatency.record(response.requestLatencyMs()); future.complete(syncResponse.memberAssignment()); } else { requestRejoin(); if (error == Errors.GROUP_AUTHORIZATION_FAILED) { future.raise(new GroupAuthorizationException(groupId)); } else if (error == Errors.REBALANCE_IN_PROGRESS) { log.debug("SyncGroup failed because the group began another rebalance"); future.raise(error); } else if (error == Errors.UNKNOWN_MEMBER_ID || error == Errors.ILLEGAL_GENERATION) { log.debug("SyncGroup failed: {}", error.message()); resetGeneration(); future.raise(error); } else if (error == Errors.COORDINATOR_NOT_AVAILABLE || error == Errors.NOT_COORDINATOR) { log.debug("SyncGroup failed: {}", error.message()); markCoordinatorUnknown(); future.raise(error); } else { future.raise(new KafkaException("Unexpected error from SyncGroup: " + error.message())); } } } }
@Test public void testBasicCompletion() { RequestFuture<String> future = new RequestFuture<>(); String value = "foo"; future.complete(value); assertTrue(future.isDone()); assertEquals(value, future.value()); }
@Test public void testVoidFuture() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); assertTrue(future.isDone()); assertNull(future.value()); }
@Test public void listenersInvokedIfAddedBeforeAndAfterCompletion() { RequestFuture<Void> future = new RequestFuture<>(); MockRequestFutureListener<Void> beforeListener = new MockRequestFutureListener<>(); future.addListener(beforeListener); future.complete(null); MockRequestFutureListener<Void> afterListener = new MockRequestFutureListener<>(); future.addListener(afterListener); assertOnSuccessInvoked(beforeListener); assertOnSuccessInvoked(afterListener); }
@Test public void testComposeSuccessCase() { RequestFuture<String> future = new RequestFuture<>(); RequestFuture<Integer> composed = future.compose(new RequestFutureAdapter<String, Integer>() { @Override public void onSuccess(String value, RequestFuture<Integer> future) { future.complete(value.length()); } }); future.complete("hello"); assertTrue(composed.isDone()); assertTrue(composed.succeeded()); assertEquals(5, (int) composed.value()); }