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

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


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

commit 7e2e86d68357c7b418dbb3ab5cc41d9c8a1f64f2
Author: Xiao Liu <[email protected]>
AuthorDate: Tue Jun 16 19:48:36 2026 +0800

    HBASE-30209 MobFileCleanerChore is not registered for online configur… 
(#8341)
    
    Signed-off-by: Junegunn Choi <[email protected]>
    Reviewed-by: Vladimir Rodionov <[email protected]>
    
    (cherry picked from commit ea5f4c500e2ca3d114e6d835e3d7be87614e2777)
---
 .../org/apache/hadoop/hbase/master/HMaster.java    |  1 +
 .../hbase/master/TestMasterChoreScheduled.java     |  6 ++++++
 .../hadoop/hbase/mob/TestMobFileCleanerChore.java  | 23 ++++++++++++++++++++++
 3 files changed, 30 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 0e2e426f8d2..4ede088c613 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
@@ -1487,6 +1487,7 @@ public class HMaster extends HRegionServer implements 
MasterServices {
 
   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 f10ccd5801c..5eeb8e011c5 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,11 @@ 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);
   }
 
   /**
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