lucasbru commented on code in PR #15334:
URL: https://github.com/apache/kafka/pull/15334#discussion_r1481228908


##########
core/src/test/scala/integration/kafka/api/PlaintextConsumerTest.scala:
##########
@@ -1378,6 +1377,14 @@ class PlaintextConsumerTest extends BaseConsumerTest {
     // after rebalancing, we should have reset to the committed positions
     assertEquals(10, testConsumer.committed(Set(tp).asJava).get(tp).offset)
     assertEquals(20, testConsumer.committed(Set(tp2).asJava).get(tp2).offset)
+
+    // In both CLASSIC and CONSUMER protocols, interceptors are executed in 
poll and close.
+    // However, in the CONSUMER protocol, the assignment may be changed 
outside of a poll, so
+    // we need to poll once to ensure the interceptor is called.
+    if (groupProtocol.toUpperCase == GroupProtocol.CONSUMER.name) {
+      testConsumer.poll(Duration.ZERO);

Review Comment:
   The alternatives to this are
   
    - Write a KIP to allow ConsumerInterceptor to be called from other threads. 
This would require all implementors of interceptors to make their 
implementations thread-safe.
    - Execute the interceptors inside `AsyncKafkaConsumer.assignment` 
specifically to work around the problem of observing the assignment without 
running the intereceptors.
   
   I think both options are worse than keeping this slight difference in 
behavior.



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to