Chia-Ping Tsai created KAFKA-16938:
--------------------------------------

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


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