You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "1fanwang (via GitHub)" <gi...@apache.org> on 2026/08/21 13:13:44 UTC

[PR] KAFKA-20890: Restore dynamic broker configs before startup [kafka]

1fanwang opened a new pull request, #23226:
URL: https://github.com/apache/kafka/pull/23226

   Persisted dynamic broker configs can fail to return to the active runtime after a KRaft broker restart when the local metadata snapshot is missing or stale. A value rolled out safely as `1 -> 2 -> 4` restarts from the static value `1`; replay then rejects `1 -> 4`, while the dynamic cache and cluster-default `DescribeConfigs` still report `4`.
   
   This loads cluster-default and per-broker configs together from `MetadataLoader`'s complete initial image before runtime components and quota managers are constructed. Live updates now validate public and broker reconfigurables before applying changes, and rejected pre-commit updates restore the prior dynamic maps. Same-instance restarts also clear values removed while the broker was offline.
   
   Fixes https://issues.apache.org/jira/browse/KAFKA-20890
   
   ## Testing
   
   <details>
   <summary>Raw restart regression</summary>
   
   ```text
   $ ./gradlew core:test --tests 'kafka.server.DynamicBrokerReconfigurationTest.testRestoreDynamicConfigFromMetadataLog'
   
   # Before
   snapshot=none FAILED
   AssertionFailedError: active=1 cached=4 reportedDefault=4 namedBroker=1 ==> expected: <4> but was: <1>
   snapshot=stale FAILED
   AssertionFailedError: active=1 cached=4 reportedDefault=4 namedBroker=1 ==> expected: <4> but was: <1>
   snapshot=current PASSED
   3 tests completed, 2 failed
   BUILD FAILED
   
   # After
   snapshot=none PASSED
   snapshot=stale PASSED
   snapshot=current PASSED
   BUILD SUCCESSFUL
   ```
   
   </details>
   
   <details>
   <summary>Raw focused and full test output</summary>
   
   ```text
   $ ./gradlew core:test --tests 'kafka.server.metadata.BrokerMetadataPublisherTest'
   testInitialDynamicConfigFailureKeepsPublisherRemovable() PASSED
   BUILD SUCCESSFUL in 28s
   
   $ ./gradlew core:test --tests 'kafka.server.DynamicBrokerConfigTest'
   BUILD SUCCESSFUL in 4s
   
   $ ./gradlew core:test --tests 'kafka.server.DynamicBrokerReconfigurationTest'
   testRemoveDynamicConfigWhileBrokerIsStopped() PASSED
   snapshot=none PASSED
   snapshot=stale PASSED
   snapshot=current PASSED
   BUILD SUCCESSFUL in 5m 8s
   ```
   
   </details>
   
   <details>
   <summary>Raw static checks</summary>
   
   ```text
   $ ./gradlew core:checkstyleMain core:checkstyleTest core:spotbugsMain core:spotbugsTest -x test
   > Task :core:checkstyleMain UP-TO-DATE
   > Task :core:checkstyleTest UP-TO-DATE
   > Task :core:spotbugsMain UP-TO-DATE
   > Task :core:spotbugsTest SKIPPED
   BUILD SUCCESSFUL in 3s
   
   $ ./gradlew spotlessCheck
   BUILD SUCCESSFUL in 2s
   ```
   
   `spotbugsTest` is skipped because `core` has no Java test sources.
   
   </details>
   


-- 
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-unsubscribe@kafka.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [PR] KAFKA-20890: Restore dynamic broker configs before startup [kafka]

Posted by "1fanwang (via GitHub)" <gi...@apache.org>.
1fanwang closed pull request #23226: KAFKA-20890: Restore dynamic broker configs before startup
URL: https://github.com/apache/kafka/pull/23226


-- 
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-unsubscribe@kafka.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org