chia7712 commented on code in PR #21273:
URL: https://github.com/apache/kafka/pull/21273#discussion_r2837664691


##########
core/src/main/scala/kafka/server/DynamicBrokerConfig.scala:
##########
@@ -577,8 +577,20 @@ class DynamicLogConfig(logManager: LogManager) extends 
BrokerReconfigurable with
       }
     }
 
+    def validateCordonedLogDirs(): Unit = {

Review Comment:
   Thanks for the explanation! just to clarify the operational flow for 
removing a folder. I assume the intuitive steps would be:
   
   1. Cordon the target folder via the Admin API.
   2. Move out all replicas.
   3. Shut down the broker.
   4. Update log.dirs in the local configuration file.
   5. Restart the broker.
   
   The step 5 will catch a ConfigException and silently drop other dynamic 
configs.
   
   ```
   [2026-02-22 11:32:39,658] ERROR Per-broker configs of 17280 could not be 
applied: [cordoned.log.dirs] (kafka.server.DynamicBrokerConfig)
   java.lang.IllegalArgumentException: requirement failed: All entries in 
cordoned.log.dirs must be present in cordoned.log.dirs or log.dir. Missing 
entries : /tmp/log-folder-1
        at scala.Predef$.require(Predef.scala:337)
        at 
kafka.server.KafkaConfig.validateCordonedLogDirs(KafkaConfig.scala:493)
        at kafka.server.KafkaConfig.validateValues(KafkaConfig.scala:624)
        at kafka.server.KafkaConfig.<init>(KafkaConfig.scala:497)
        at kafka.server.KafkaConfig.<init>(KafkaConfig.scala:147)
        at 
kafka.server.DynamicBrokerConfig.processReconfiguration(DynamicBrokerConfig.scala:446)
        at 
kafka.server.DynamicBrokerConfig.updateCurrentConfig(DynamicBrokerConfig.scala:435)
        at 
kafka.server.DynamicBrokerConfig.$anonfun$updateBrokerConfig$1(DynamicBrokerConfig.scala:281)
        at org.apache.kafka.server.util.LockUtils.inLock(LockUtils.java:96)
        at 
org.apache.kafka.server.util.LockUtils.inWriteLock(LockUtils.java:115)
        at 
kafka.server.DynamicBrokerConfig.updateBrokerConfig(DynamicBrokerConfig.scala:276)
        at 
kafka.server.BrokerConfigHandler.processConfigChanges(ConfigHandler.scala:152)
        at 
kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$5(DynamicConfigPublisher.scala:92)
        at scala.Option.foreach(Option.scala:437)
        at 
kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$2(DynamicConfigPublisher.scala:74)
        at java.base/java.util.HashMap$KeySet.forEach(HashMap.java:1017)
        at 
kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$1(DynamicConfigPublisher.scala:57)
        at 
kafka.server.metadata.DynamicConfigPublisher.$anonfun$onMetadataUpdate$1$adapted(DynamicConfigPublisher.scala:56)
        at scala.Option.foreach(Option.scala:437)
        at 
kafka.server.metadata.DynamicConfigPublisher.onMetadataUpdate(DynamicConfigPublisher.scala:56)
        at 
kafka.server.metadata.BrokerMetadataPublisher.onMetadataUpdate(BrokerMetadataPublisher.scala:190)
        at 
org.apache.kafka.image.loader.MetadataLoader.initializeNewPublishers(MetadataLoader.java:315)
        at 
org.apache.kafka.image.loader.MetadataLoader.lambda$scheduleInitializeNewPublishers$0(MetadataLoader.java:272)
        at 
org.apache.kafka.queue.KafkaEventQueue$EventContext.run(KafkaEventQueue.java:134)
        at 
org.apache.kafka.queue.KafkaEventQueue$EventHandler.handleEvents(KafkaEventQueue.java:217)
        at 
org.apache.kafka.queue.KafkaEventQueue$EventHandler.run(KafkaEventQueue.java:188)
        at java.base/java.lang.Thread.run(Thread.java:1474)
   ```
   
   If the recommended workaround is to remove the folder from 
`cordoned.log.dirs` while the broker is offline (between steps 3 and 5), how 
does the `Admi` client handle this? Since we cannot connect via 
`bootstrap.servers`, the only way is to use `bootstrap.controller`



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