[
https://issues.apache.org/jira/browse/KAFKA-16938?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Chia-Ping Tsai reassigned KAFKA-16938:
--------------------------------------
Assignee: TengYao Chi (was: Chia-Ping Tsai)
> 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)