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

Reply via email to