kirktrue commented on code in PR #17440:
URL: https://github.com/apache/kafka/pull/17440#discussion_r1805164231


##########
clients/src/main/java/org/apache/kafka/clients/consumer/internals/AsyncKafkaConsumer.java:
##########
@@ -1277,10 +1284,12 @@ private void releaseAssignmentAndLeaveGroup(final Timer 
timer) {
         UnsubscribeEvent unsubscribeEvent = new 
UnsubscribeEvent(calculateDeadlineMs(timer));
         applicationEventHandler.add(unsubscribeEvent);
         try {
-            // If users subscribe to an invalid topic name, they will get 
InvalidTopicException in error events,
+            // If users subscribe to an invalid topic name or subscribe an 
authorization topic,
+            // they will get InvalidTopicException or 
TopicAuthorizationException in error events,
             // because network thread keeps trying to send MetadataRequest in 
the background.
             // Ignore it to avoid unsubscribe failed.
-            processBackgroundEvents(unsubscribeEvent.future(), timer, e -> e 
instanceof InvalidTopicException);
+            processBackgroundEvents(unsubscribeEvent.future(), timer,
+                    e -> e instanceof InvalidTopicException || e instanceof 
TopicAuthorizationException || e instanceof GroupAuthorizationException);

Review Comment:
   For readability, could you introduce a `Predicate` variable, a la:
   
   ```suggestion
               final Predicate<Exception> ignoreExceptions = e ->
                   e instanceof InvalidTopicException ||
                   e instanceof TopicAuthorizationException ||
                   e instanceof GroupAuthorizationException;
               processBackgroundEvents(unsubscribeEvent.future(), timer, 
ignoreExceptions);
   ```



##########
clients/src/main/java/org/apache/kafka/clients/consumer/internals/AsyncKafkaConsumer.java:
##########
@@ -1132,7 +1135,11 @@ private Map<TopicPartition, Long> 
beginningOrEndOffset(Collection<TopicPartition
 
             Map<TopicPartition, OffsetAndTimestampInternal> 
offsetAndTimestampMap;
             try {
-                offsetAndTimestampMap = 
applicationEventHandler.addAndGet(listOffsetsEvent);
+                applicationEventHandler.add(listOffsetsEvent);
+                offsetAndTimestampMap = processBackgroundEvents(
+                        listOffsetsEvent.future(),
+                        timer, __ -> false
+                );

Review Comment:
   As I understand it, we need to check for the errors from the background 
thread. But do we need to check _repeatedly_ during the execution of the 
`ListOffsetsEvent`, or can we just check once beforehand?
   
   ```suggestion
                   processBackgroundEvents();
                   offsetAndTimestampMap = 
applicationEventHandler.addAndGet(listOffsetsEvent);
   ```
   
   



##########
clients/src/main/java/org/apache/kafka/clients/consumer/internals/AsyncKafkaConsumer.java:
##########
@@ -1584,7 +1593,11 @@ private boolean updateFetchPositions(final Timer timer) {
         try {
             CheckAndUpdatePositionsEvent checkAndUpdatePositionsEvent = new 
CheckAndUpdatePositionsEvent(calculateDeadlineMs(timer));
             wakeupTrigger.setActiveTask(checkAndUpdatePositionsEvent.future());
-            cachedSubscriptionHasAllFetchPositions = 
applicationEventHandler.addAndGet(checkAndUpdatePositionsEvent);
+            applicationEventHandler.add(checkAndUpdatePositionsEvent);
+            cachedSubscriptionHasAllFetchPositions = processBackgroundEvents(
+                    checkAndUpdatePositionsEvent.future(),
+                    timer, __ -> false
+            );

Review Comment:
   ```suggestion
               processBackgroundEvents();
               cachedSubscriptionHasAllFetchPositions = 
applicationEventHandler.addAndGet(checkAndUpdatePositionsEvent);
   ```



-- 
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

Reply via email to