private RequestFuture<ByteBuffer> sendSyncGroupRequest(SyncGroupRequest.Builder requestBuilder) { if (coordinatorUnknown()) return RequestFuture.coordinatorNotAvailable(); return client.send(coordinator, requestBuilder) .compose(new SyncGroupResponseHandler()); }
@Override public void onFailure(RuntimeException e, RequestFuture<T> future) { // mark the coordinator as dead if (e instanceof DisconnectException) { markCoordinatorUnknown(true); } future.raise(e); }
/** * Send Metadata Request to least loaded node in Kafka cluster asynchronously * @return A future that indicates result of sent metadata request */ private RequestFuture<ClientResponse> sendMetadataRequest(MetadataRequest.Builder request) { final Node node = client.leastLoadedNode(); if (node == null) return RequestFuture.noBrokersAvailable(); else return client.send(node, request); }
@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); }
@Override public boolean rejoinNeededOrPending() { if (!subscriptions.partitionsAutoAssigned()) return false; // we need to rejoin if we performed the assignment and metadata has changed if (assignmentSnapshot != null && !assignmentSnapshot.equals(metadataSnapshot)) return true; // we need to join if our subscription has changed since the last join if (joinedSubscription != null && !joinedSubscription.equals(subscriptions.subscription())) return true; return super.rejoinNeededOrPending(); }
@Override public void run() { consumerClient.poll(future); } };
protected synchronized RequestFuture<Void> lookupCoordinator() { if (findCoordinatorFuture == null) { // find a node to ask about the coordinator Node node = this.client.leastLoadedNode(); if (node == null) { log.debug("No broker available to send FindCoordinator request"); return RequestFuture.noBrokersAvailable(); } else findCoordinatorFuture = sendFindCoordinatorRequest(node); } return findCoordinatorFuture; }
/** * Get the coordinator if its connection is still active. Otherwise mark it unknown and * return null. * * @return the current coordinator or null if it is unknown */ protected synchronized Node checkAndGetCoordinator() { if (coordinator != null && client.isUnavailable(coordinator)) { markCoordinatorUnknown(true); return null; } return this.coordinator; }
private synchronized void startHeartbeatThreadIfNeeded() { if (heartbeatThread == null) { heartbeatThread = new HeartbeatThread(); heartbeatThread.start(); } }
public double measure(MetricConfig config, long now) { // Get the number of assigned partitions in a thread safe manner return subscriptions.numAssignedPartitions(); } };
private Long offsetResetStrategyTimestamp(final TopicPartition partition) { OffsetResetStrategy strategy = subscriptions.resetStrategy(partition); if (strategy == OffsetResetStrategy.EARLIEST) return ListOffsetRequest.EARLIEST_TIMESTAMP; else if (strategy == OffsetResetStrategy.LATEST) return ListOffsetRequest.LATEST_TIMESTAMP; else return null; }
@Override public void run() { consumerClient.pollNoWakeup(); } };
@Override public void onSuccess(Void value) { synchronized (AbstractCoordinator.this) { heartbeat.receiveHeartbeat(); } }
public Long partitionLag(TopicPartition tp, IsolationLevel isolationLevel) { TopicPartitionState topicPartitionState = assignedState(tp); if (isolationLevel == IsolationLevel.READ_COMMITTED) return topicPartitionState.lastStableOffset == null ? null : topicPartitionState.lastStableOffset - topicPartitionState.position; else return topicPartitionState.highWatermark == null ? null : topicPartitionState.highWatermark - topicPartitionState.position; }
/** * Check if we know who the coordinator is and we have an active connection * @return true if the coordinator is unknown */ public boolean coordinatorUnknown() { return checkAndGetCoordinator() == null; }
private <K, V> Fetcher<K, V> createFetcher(SubscriptionState subscriptions, Metrics metrics, Deserializer<K> keyDeserializer, Deserializer<V> valueDeserializer) { return createFetcher(subscriptions, metrics, keyDeserializer, valueDeserializer, Integer.MAX_VALUE, IsolationLevel.READ_UNCOMMITTED); }
@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 run() { consumerClient.poll(future); } };
@Test public void listenerInvokedIfAddedAfterFutureCompletion() { RequestFuture<Void> future = new RequestFuture<>(); future.complete(null); MockRequestFutureListener<Void> listener = new MockRequestFutureListener<>(); future.addListener(listener); assertOnSuccessInvoked(listener); }