This is an automated email from the ASF dual-hosted git repository.

liuxiaocs7 pushed a commit to branch branch-3
in repository https://gitbox.apache.org/repos/asf/hbase.git


The following commit(s) were added to refs/heads/branch-3 by this push:
     new 61d9260e189 HBASE-30209 MobFileCleanerChore is not registered for 
online configur… (#8324)
61d9260e189 is described below

commit 61d9260e1895de1f92808c7fe51c5ee66536745e
Author: Xiao Liu <[email protected]>
AuthorDate: Thu Jun 11 20:39:17 2026 +0800

    HBASE-30209 MobFileCleanerChore is not registered for online configur… 
(#8324)
    
    Signed-off-by: Junegunn Choi <[email protected]>
    Reviewed-by: Vladimir Rodionov <[email protected]>
---
 .../org/apache/hadoop/hbase/master/HMaster.java    |  1 +
 .../hbase/master/TestMasterChoreScheduled.java     |  7 +++++++
 .../hadoop/hbase/mob/TestMobFileCleanerChore.java  | 23 ++++++++++++++++++++++
 3 files changed, 31 insertions(+)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
index 2a78ea867aa..4939d08a435 100644
--- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
+++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/HMaster.java
@@ -1552,6 +1552,7 @@ public class HMaster extends 
HBaseServerBase<MasterRpcServices> implements Maste
 
   private void initMobCleaner() {
     this.mobFileCleanerChore = new MobFileCleanerChore(this);
+    configurationManager.registerObserver(this.mobFileCleanerChore);
     getChoreService().scheduleChore(mobFileCleanerChore);
     this.mobFileCompactionChore = new MobFileCompactionChore(this);
     getChoreService().scheduleChore(mobFileCompactionChore);
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java
index 31da027db02..fe16216385b 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java
@@ -32,6 +32,7 @@ import org.apache.hadoop.hbase.master.cleaner.LogCleaner;
 import org.apache.hadoop.hbase.master.cleaner.ReplicationBarrierCleaner;
 import org.apache.hadoop.hbase.master.hbck.HbckChore;
 import org.apache.hadoop.hbase.master.janitor.CatalogJanitor;
+import org.apache.hadoop.hbase.mob.MobFileCleanerChore;
 import org.apache.hadoop.hbase.testclassification.MasterTests;
 import org.apache.hadoop.hbase.testclassification.MediumTests;
 import org.junit.jupiter.api.AfterAll;
@@ -108,6 +109,12 @@ public class TestMasterChoreScheduled {
     TestChoreField<HbckChore> hbckChoreTestChoreField = new TestChoreField<>();
     HbckChore hbckChore = hbckChoreTestChoreField.getChoreObj("hbckChore");
     hbckChoreTestChoreField.testIfChoreScheduled(hbckChore);
+
+    TestChoreField<MobFileCleanerChore> mobFileCleanerTestChoreField = new 
TestChoreField<>();
+    MobFileCleanerChore mobFileCleanerChore =
+      mobFileCleanerTestChoreField.getChoreObj("mobFileCleanerChore");
+    mobFileCleanerTestChoreField.testIfChoreScheduled(mobFileCleanerChore);
+    
assertTrue(hMaster.getConfigurationManager().containsObserver(mobFileCleanerChore));
   }
 
   /**
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFileCleanerChore.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFileCleanerChore.java
index c2878a189aa..da02d8c85da 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFileCleanerChore.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/mob/TestMobFileCleanerChore.java
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hbase.mob;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.mockito.Mockito.mock;
@@ -34,6 +35,28 @@ import org.junit.jupiter.api.Test;
 @Tag(SmallTests.TAG)
 public class TestMobFileCleanerChore {
 
+  @Test
+  public void testOnConfigurationChangeResizesExecutor() {
+    Configuration conf = new Configuration();
+    conf.setInt(MobConstants.MOB_CLEANER_THREAD_COUNT, 2);
+    HMaster master = mock(HMaster.class);
+    when(master.getServerName()).thenReturn(ServerName.valueOf("localhost", 
12345, 1));
+    when(master.getConfiguration()).thenReturn(conf);
+
+    MobFileCleanerChore chore = new MobFileCleanerChore(master);
+    assertEquals(2, chore.getExecutor().getCorePoolSize());
+    assertEquals(2, chore.getExecutor().getMaximumPoolSize());
+
+    Configuration newConf = new Configuration(conf);
+    newConf.setInt(MobConstants.MOB_CLEANER_THREAD_COUNT, 4);
+    chore.onConfigurationChange(newConf);
+
+    assertEquals(4, chore.getExecutor().getCorePoolSize());
+    assertEquals(4, chore.getExecutor().getMaximumPoolSize());
+
+    chore.shutdown();
+  }
+
   @Test
   public void testShutdownCleansUpExecutor() {
     Configuration conf = new Configuration();

Reply via email to