diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java index 09e3acdfef6..ea743eafe97 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java @@ -267,8 +267,7 @@ public class HBaseFsck extends Configured implements Tool { super(conf); errors = getErrorReporter(conf); - int numThreads = conf.getInt("hbasefsck.numthreads", MAX_NUM_THREADS); - executor = new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck")); + initialPoolNumThreads(); } /** @@ -299,6 +298,18 @@ public class HBaseFsck extends Configured implements Tool { connection = admin.getConnection(); } + /** + * Initial numThreads for {@link #executor} + */ + private void initialPoolNumThreads() { + if (executor != null) { + executor.shutdown(); + } + + int numThreads = getConf().getInt("hbasefsck.numthreads", MAX_NUM_THREADS); + executor = new ScheduledThreadPoolExecutor(numThreads, Threads.newDaemonThreadFactory("hbasefsck")); + } + /** * Get deployed regions according to the region servers. */ @@ -3596,6 +3607,9 @@ public class HBaseFsck extends Configured implements Tool { @Override public int run(String[] args) throws Exception { + // reset the numThreads due to user may set it via generic options + initialPoolNumThreads(); + exec(executor, args); return getRetCode(); }