From 98fb3bd304ccf6eb58e4a84bf2827669775259ad Mon Sep 17 00:00:00 2001 From: Luke Chen Date: Sat, 17 Feb 2024 13:58:11 +0800 Subject: [PATCH] MINOR: log error when initialLoadFuture is not done in authorizer (#14953) Currently, when initializing StandardAuthorizer, it'll wait until all ACL loaded and complete the initialLoadFuture. So, checking logs, we'll see: 2023-12-06 14:07:50,325 INFO [StandardAuthorizer 1] Initialized with 6 acl(s). (org.apache.kafka.metadata.authorizer.StandardAuthorizerData) [kafka-1-metadata-loader-event-handler] 2023-12-06 14:07:50,325 INFO [StandardAuthorizer 1] Completed initial ACL load process. (org.apache.kafka.metadata.authorizer.StandardAuthorizerData) [kafka-1-metadata-loader-event-handler] But then, when shutting down the node, we will also see this error: 2023-12-06 14:12:32,752 ERROR [StandardAuthorizer 1] Failed to complete initial ACL load process. (org.apache.kafka.metadata.authorizer.StandardAuthorizerData) [kafka-1-metadata-loader-event-handler] java.util.concurrent.TimeoutException at kafka.server.metadata.AclPublisher.close(AclPublisher.scala:98) at org.apache.kafka.image.loader.MetadataLoader.closePublisher(MetadataLoader.java:568) at org.apache.kafka.image.loader.MetadataLoader.lambda$removeAndClosePublisher$7(MetadataLoader.java:528) at org.apache.kafka.queue.KafkaEventQueue$EventContext.run(KafkaEventQueue.java:127) at org.apache.kafka.queue.KafkaEventQueue$EventHandler.handleEvents(KafkaEventQueue.java:210) at org.apache.kafka.queue.KafkaEventQueue$EventHandler.run(KafkaEventQueue.java:181) at java.base/java.lang.Thread.run(Thread.java:840) It's confusing. And it's because we'll try to complete authorizer initialLoad, and complete the initialLoadFuture if not done. But we'll log the error no matter it's completed or not. This patch improves the logging. Reviewers: Josep Prat --- .../kafka/metadata/authorizer/StandardAuthorizer.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/metadata/src/main/java/org/apache/kafka/metadata/authorizer/StandardAuthorizer.java b/metadata/src/main/java/org/apache/kafka/metadata/authorizer/StandardAuthorizer.java index 7e9f779093e..106f6aba949 100644 --- a/metadata/src/main/java/org/apache/kafka/metadata/authorizer/StandardAuthorizer.java +++ b/metadata/src/main/java/org/apache/kafka/metadata/authorizer/StandardAuthorizer.java @@ -93,8 +93,10 @@ public class StandardAuthorizer implements ClusterMetadataAuthorizer { @Override public void completeInitialLoad(Exception e) { - data.log.error("Failed to complete initial ACL load process.", e); - initialLoadFuture.completeExceptionally(e); + if (!initialLoadFuture.isDone()) { + data.log.error("Failed to complete initial ACL load process.", e); + initialLoadFuture.completeExceptionally(e); + } } @Override