dajac commented on a change in pull request #11920: URL: https://github.com/apache/kafka/pull/11920#discussion_r833010111
########## File path: core/src/main/scala/kafka/server/DynamicBrokerConfig.scala ########## @@ -201,7 +202,9 @@ class DynamicBrokerConfig(private val kafkaConfig: KafkaConfig) extends Logging private[server] val staticDefaultConfigs = ConfigDef.convertToStringMapWithPasswordValues(KafkaConfig.defaultValues.asJava).asScala private val dynamicBrokerConfigs = mutable.Map[String, String]() private val dynamicDefaultConfigs = mutable.Map[String, String]() - private val reconfigurables = mutable.Buffer[Reconfigurable]() + + // Use COWArrayList to prevent concurrent modification exception when reconfigurable added while iteration over list occurring + private val reconfigurables = new CopyOnWriteArrayList[Reconfigurable]() private val brokerReconfigurables = mutable.Buffer[BrokerReconfigurable]() Review comment: Is it worth doing the same for this one in order to avoid a similar issue in the future? ########## File path: core/src/main/scala/kafka/server/DynamicBrokerConfig.scala ########## @@ -535,8 +538,8 @@ class DynamicBrokerConfig(private val kafkaConfig: KafkaConfig) extends Logging if (changeMap.nonEmpty || deletedKeySet.nonEmpty) { try { val customConfigs = new util.HashMap[String, Object](newConfig.originalsFromThisConfig) // non-Kafka configs - newConfig.valuesFromThisConfig.keySet.forEach(customConfigs.remove(_)) - reconfigurables.foreach { + newConfig.valuesFromThisConfig.keySet.forEach(k => customConfigs.remove(k)) + reconfigurables.asScala.foreach { Review comment: nit: Could we use `forEach` instead of `asScala.foreach` here? I am not sure if it works though. -- 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