[ 
https://issues.apache.org/jira/browse/KAFKA-16938?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chia-Ping Tsai updated KAFKA-16938:
-----------------------------------
    Fix Version/s: 3.9.0

> non-dynamic props gets corrupted due to circular reference between 
> DynamicBrokerConfig and DynamicConfig
> --------------------------------------------------------------------------------------------------------
>
>                 Key: KAFKA-16938
>                 URL: https://issues.apache.org/jira/browse/KAFKA-16938
>             Project: Kafka
>          Issue Type: Bug
>            Reporter: Chia-Ping Tsai
>            Assignee: Chia-Ping Tsai
>            Priority: Blocker
>             Fix For: 3.9.0
>
>
> DynamicBrokerConfig has circular reference with DynamicConfig. The following 
> initialization order will cause incorrect non-dynamic props [0]
> 1. DynamicConfig is initializing -> brokerConfigs is created [1]
> 2. DynamicConfig is initializing -> call 
> DynamicBrokerConfig.addDynamicConfigs(brokerConfigs) [2]
> 3. DynamicBrokerConfig is initializing -> nonDynamicProps: Set[String] = 
> KafkaConfig.configNames.toSet – DynamicConfig.Broker.names.asScala [3]
> 4. DynamicConfig.Broker.names reference `brokerConfigs`, and `brokerConfigs` 
> does not have all dynamic props (step2), so nonDynamicProps get created with 
> incorrect contents.
> We should break the circular by addressing following tasks:
> 1. move `DynamicBrokerConfig.addDynamicConfigs` to `DynamicConfig.Broker`
> 2. move `DynamicBrokerConfig#nonDynamicProps` to `DynamicConfig.Broker`
> {code:scala}
> object DynamicConfig {
>   object Broker {
>     private val brokerConfigs = {
>       val configs = QuotaConfigs.brokerQuotaConfigs()
>       KafkaConfig.configKeys.filter {
>         case (configName, _) => AllDynamicConfigs.contains(configName)
>       }.foreach {
>         case (_, config) => configs.define(config)
>       }
>       configs
>     }
>     val nonDynamicProps: Set[String] = KafkaConfig.configNames.toSet -- 
> brokerConfigs.names.asScala
> {code}
> [0] 
> [https://github.com/apache/kafka/blob/638844f833b165d6f9ca52c173858d26b7254fac/core/src/main/scala/kafka/server/DynamicBrokerConfig.scala#L120]
> [1] 
> [https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/server/DynamicConfig.scala#L35]
> [2] 
> [https://github.com/apache/kafka/blob/trunk/core/src/main/scala/kafka/server/DynamicConfig.scala#L36]
> [3] 
> [https://github.com/apache/kafka/blob/638844f833b165d6f9ca52c173858d26b7254fac/core/src/main/scala/kafka/server/DynamicBrokerConfig.scala#L120]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to