From 489e02b3b0e2ad3de66422c322bc48734079f6ec Mon Sep 17 00:00:00 2001 From: Xiao Liu Date: Thu, 11 Jun 2026 20:39:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?HBASE-30209=20MobFileCleanerChore=20is=20no?= =?UTF-8?q?t=20registered=20for=20online=20configur=E2=80=A6=20(#8324)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Junegunn Choi Reviewed-by: Vladimir Rodionov --- .../apache/hadoop/hbase/master/HMaster.java | 1 + .../master/TestMasterChoreScheduled.java | 7 ++++++ .../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 25ca935271f0..2df9affb5d94 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 void updateConfigurationForQuotasObserver(Configuration conf) { 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 f10ccd5801ce..f37fb4c56ed4 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.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 void testDefaultScheduledChores() throws Exception { TestChoreField hbckChoreTestChoreField = new TestChoreField<>(); HbckChore hbckChore = hbckChoreTestChoreField.getChoreObj("hbckChore"); hbckChoreTestChoreField.testIfChoreScheduled(hbckChore); + + TestChoreField 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 c2878a189aa6..da02d8c85da1 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 @@ @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(); From ad589fbccc0c2981c75515be58ae48e3e308b321 Mon Sep 17 00:00:00 2001 From: liuxiaocs7 Date: Thu, 11 Jun 2026 23:03:30 +0800 Subject: [PATCH 2/2] address comments --- .../org/apache/hadoop/hbase/master/TestMasterChoreScheduled.java | 1 - 1 file changed, 1 deletion(-) 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 f37fb4c56ed4..5eeb8e011c54 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 @@ -114,7 +114,6 @@ public void testDefaultScheduledChores() throws Exception { MobFileCleanerChore mobFileCleanerChore = mobFileCleanerTestChoreField.getChoreObj("mobFileCleanerChore"); mobFileCleanerTestChoreField.testIfChoreScheduled(mobFileCleanerChore); - assertTrue(hMaster.getConfigurationManager().containsObserver(mobFileCleanerChore)); } /**