This is an automated email from the ASF dual-hosted git repository. lhotari pushed a commit to branch branch-4.0 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit c71ccc7e62d7f6916ed4f6f8a1cdb85b98c75ee6 Author: Matteo Merli <[email protected]> AuthorDate: Fri Mar 20 17:02:13 2026 -0700 [fix][test] Fix flaky ExtensibleLoadManagerImplTest.testLoadBalancerServiceUnitTableViewSyncer (#25378) (cherry picked from commit 4e7ee9448fc5ce84774646de118f49318b0e8ec5) --- .../extensions/ExtensibleLoadManagerImplTest.java | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java index d62e41450b8..4302c99bc89 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/extensions/ExtensibleLoadManagerImplTest.java @@ -1285,12 +1285,19 @@ public class ExtensibleLoadManagerImplTest extends ExtensibleLoadManagerImplBase ? "SystemTopicToMetadataStoreSyncer" : "MetadataStoreToSystemTopicSyncer"; pulsar.getAdminClient().brokers() .updateDynamicConfiguration("loadBalancerServiceUnitTableViewSyncer", syncerTyp); + // Wait for the dynamic config to propagate to both brokers before triggering + // leader transitions. Without this, the leader callback may see the old config + // and skip activating the syncer. + Awaitility.await().untilAsserted(() -> + assertTrue(pulsar1.getConfiguration().isLoadBalancerServiceUnitTableViewSyncerEnabled())); + Awaitility.await().untilAsserted(() -> + assertTrue(pulsar2.getConfiguration().isLoadBalancerServiceUnitTableViewSyncerEnabled())); makeSecondaryAsLeader(); makePrimaryAsLeader(); - Awaitility.waitAtMost(10, TimeUnit.SECONDS) + Awaitility.await() .untilAsserted(() -> assertTrue(primaryLoadManager.getServiceUnitStateTableViewSyncer() .isActive())); - Awaitility.waitAtMost(10, TimeUnit.SECONDS) + Awaitility.await() .untilAsserted(() -> assertFalse(secondaryLoadManager.getServiceUnitStateTableViewSyncer() .isActive())); ServiceConfiguration defaultConf = getDefaultConf(); @@ -1470,11 +1477,16 @@ public class ExtensibleLoadManagerImplTest extends ExtensibleLoadManagerImplBase pulsar.getAdminClient().brokers() .deleteDynamicConfiguration("loadBalancerServiceUnitTableViewSyncer"); + // Wait for config deletion to propagate before leader transition + Awaitility.await().untilAsserted(() -> + assertFalse(pulsar1.getConfiguration().isLoadBalancerServiceUnitTableViewSyncerEnabled())); + Awaitility.await().untilAsserted(() -> + assertFalse(pulsar2.getConfiguration().isLoadBalancerServiceUnitTableViewSyncerEnabled())); makeSecondaryAsLeader(); - Awaitility.waitAtMost(5, TimeUnit.SECONDS) + Awaitility.await() .untilAsserted(() -> assertFalse(primaryLoadManager.getServiceUnitStateTableViewSyncer() .isActive())); - Awaitility.waitAtMost(5, TimeUnit.SECONDS) + Awaitility.await() .untilAsserted(() -> assertFalse(secondaryLoadManager.getServiceUnitStateTableViewSyncer() .isActive())); }
