lucasbru commented on code in PR #14922: URL: https://github.com/apache/kafka/pull/14922#discussion_r1418773892
########## streams/src/main/java/org/apache/kafka/streams/processor/internals/StreamThread.java: ########## @@ -713,6 +723,44 @@ boolean runLoop() { return true; } + // visible for testing + void maybeGetClientInstanceIds() { + // we pass in a timeout of zero into each `clientInstanceId()` call + // to just trigger the "get instance id" background RPC; + // we don't want to block the stream thread that can do useful work in the meantime + + if (fetchDeadlineClientInstanceId != -1) { + if (!mainConsumerInstanceIdFuture.isDone()) { + if (fetchDeadlineClientInstanceId >= time.milliseconds()) { + try { + mainConsumerInstanceIdFuture.complete(mainConsumer.clientInstanceId(Duration.ZERO)); + maybeResetFetchDeadline(); + } catch (final IllegalStateException disabledError) { + mainConsumerInstanceIdFuture.complete(null); + maybeResetFetchDeadline(); + } catch (final TimeoutException swallow) { + // swallow + } catch (final Exception error) { + mainConsumerInstanceIdFuture.completeExceptionally(error); + maybeResetFetchDeadline(); + } + } else { + mainConsumerInstanceIdFuture.completeExceptionally( + new TimeoutException("Could not retrieve main consumer client instance id.") + ); + } + } + } + } + + private void maybeResetFetchDeadline() { Review Comment: nit: not sure the function is worth it, you seem to always call it when `reset` is true. ########## streams/src/main/java/org/apache/kafka/streams/processor/internals/StreamThread.java: ########## @@ -713,6 +723,44 @@ boolean runLoop() { return true; } + // visible for testing + void maybeGetClientInstanceIds() { + // we pass in a timeout of zero into each `clientInstanceId()` call + // to just trigger the "get instance id" background RPC; + // we don't want to block the stream thread that can do useful work in the meantime + + if (fetchDeadlineClientInstanceId != -1) { + if (!mainConsumerInstanceIdFuture.isDone()) { + if (fetchDeadlineClientInstanceId >= time.milliseconds()) { + try { + mainConsumerInstanceIdFuture.complete(mainConsumer.clientInstanceId(Duration.ZERO)); + maybeResetFetchDeadline(); + } catch (final IllegalStateException disabledError) { + mainConsumerInstanceIdFuture.complete(null); + maybeResetFetchDeadline(); + } catch (final TimeoutException swallow) { + // swallow + } catch (final Exception error) { + mainConsumerInstanceIdFuture.completeExceptionally(error); + maybeResetFetchDeadline(); + } + } else { + mainConsumerInstanceIdFuture.completeExceptionally( Review Comment: reset fetch deadline as well? Otherwise we'll keep allocating this timeoutexception every time we go around the loop ########## streams/src/main/java/org/apache/kafka/streams/processor/internals/StreamThread.java: ########## @@ -713,6 +723,44 @@ boolean runLoop() { return true; } + // visible for testing + void maybeGetClientInstanceIds() { + // we pass in a timeout of zero into each `clientInstanceId()` call + // to just trigger the "get instance id" background RPC; + // we don't want to block the stream thread that can do useful work in the meantime + + if (fetchDeadlineClientInstanceId != -1) { + if (!mainConsumerInstanceIdFuture.isDone()) { + if (fetchDeadlineClientInstanceId >= time.milliseconds()) { + try { + mainConsumerInstanceIdFuture.complete(mainConsumer.clientInstanceId(Duration.ZERO)); + maybeResetFetchDeadline(); + } catch (final IllegalStateException disabledError) { + mainConsumerInstanceIdFuture.complete(null); Review Comment: why are we ignored ISE? ########## streams/src/main/java/org/apache/kafka/streams/KafkaStreams.java: ########## @@ -1813,17 +1816,29 @@ public ClientInstanceIds clientInstanceIds(final Duration timeout) { throw new IllegalStateException("KafkaStreams has been stopped (" + state + ")."); } + long remainingTimeMs = timeout.toMillis(); Review Comment: This could be a good use case for Kafkas `Timer` class. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: jira-unsubscr...@kafka.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org