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

Chia-Ping Tsai resolved KAFKA-16938.
------------------------------------
    Resolution: Fixed

> 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: TengYao Chi
>            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.name, config.`type`, config.defaultValue, 
> config.validator,
>             config.importance, config.documentation, config.group, 
> config.orderInGroup, config.width,
>             config.displayName, config.dependents, config.recommender)
>       }
>       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