This is an automated email from the ASF dual-hosted git repository. lhotari pushed a commit to branch branch-4.1 in repository https://gitbox.apache.org/repos/asf/pulsar.git
commit 9a7bac6278febae0bb2ececec430cc1bfbfe3caf Author: Kai Wang <[email protected]> AuthorDate: Tue Oct 14 15:23:55 2025 +0800 [fix][broker] Ensure LoadSheddingTask is scheduled after metadata service is available again (#24838) Motivation After PR: #23040, if the metadata service is unavailable and then becomes available again, the LoadSheddingTask will not run again. Modifications Ensure LoadSheddingTask is scheduled after metadata service is available again by moving the isMetadataServiceAvailable check to the try block. (cherry picked from commit 461ffd84d641b855fcc0d09d586ff4b580c21974) --- .../org/apache/pulsar/broker/loadbalance/LoadSheddingTask.java | 8 ++++---- .../pulsar/broker/loadbalance/SimpleLoadManagerImplTest.java | 5 ++++- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/LoadSheddingTask.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/LoadSheddingTask.java index 25a0a2752d1..4af86c1d71d 100644 --- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/LoadSheddingTask.java +++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/LoadSheddingTask.java @@ -59,11 +59,11 @@ public class LoadSheddingTask implements Runnable { if (isCancel) { return; } - if (factory instanceof ManagedLedgerFactoryImpl - && !((ManagedLedgerFactoryImpl) factory).isMetadataServiceAvailable()) { - return; - } try { + if (factory instanceof ManagedLedgerFactoryImpl + && !((ManagedLedgerFactoryImpl) factory).isMetadataServiceAvailable()) { + return; + } loadManager.get().doLoadShedding(); } catch (Exception e) { LOG.warn("Error during the load shedding", e); diff --git a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/SimpleLoadManagerImplTest.java b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/SimpleLoadManagerImplTest.java index 2f79b972b36..3f10553902a 100644 --- a/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/SimpleLoadManagerImplTest.java +++ b/pulsar-broker/src/test/java/org/apache/pulsar/broker/loadbalance/SimpleLoadManagerImplTest.java @@ -22,6 +22,7 @@ import static org.apache.pulsar.broker.BrokerTestUtil.spyWithClassAndConstructor import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.testng.Assert.assertEquals; @@ -521,12 +522,14 @@ public class SimpleLoadManagerImplTest { AtomicReference<LoadManager> atomicLoadManager = new AtomicReference<>(loadManager); ManagedLedgerFactoryImpl factory = mock(ManagedLedgerFactoryImpl.class); doReturn(false).when(factory).isMetadataServiceAvailable(); - LoadSheddingTask task2 = new LoadSheddingTask(atomicLoadManager, null, null, factory); + LoadSheddingTask task2 = spy(new LoadSheddingTask(atomicLoadManager, null, null, factory)); task2.run(); verify(loadManager, times(0)).doLoadShedding(); + verify(task2, times(1)).start(); doReturn(true).when(factory).isMetadataServiceAvailable(); task2.run(); verify(loadManager, times(1)).doLoadShedding(); + verify(task2, times(2)).start(); } @Test
