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();