[
https://issues.apache.org/jira/browse/HBASE-26114?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jingxuan Fu updated HBASE-26114:
--------------------------------
Description:
In hbase-default.xml:
{code:java}
<property>
<name>hbase.mob.compaction.threads.max</name>
<value>1</value>
<description>
The max number of threads used in MobCompactor.
</description>
</property>{code}
When the value is set to a negative number, such as -1, Hmaster cannot start
normally.
The log file will output:
{code:cpp}
2021-07-22 18:54:13,758 ERROR [master/JavaFuzz:16000:becomeActiveMaster]
master.HMaster: Failed to become active master
java.lang.IllegalArgumentException
at
java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1314)
at
org.apache.hadoop.hbase.mob.MobUtils.createMobCompactorThreadPool(MobUtils.java:880)
at org.apache.hadoop.hbase.master.MobCompactionChore.<init>
(MobCompactionChore.java:51) at
org.apache.hadoop.hbase.master.HMaster.initMobCleaner(HMaster.java:1278)
at
org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:1161)
at
org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2112)
at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:580)
at java.lang.Thread.run(Thread.java:748)
2021-07-22 18:54:13,760 ERROR [master/JavaFuzz:16000:becomeActiveMaster]
master.HMaster: Master server abort: loaded coprocessors are:
[org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint]
2021-07-22 18:54:13,760 ERROR [master/JavaFuzz:16000:becomeActiveMaster]
master.HMaster: ***** ABORTING master javafuzz,16000,1626951243154: Unhandled
exception. Starting shutdown. ***** java.lang.IllegalArgumentException
at
java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1314)
at
org.apache.hadoop.hbase.mob.MobUtils.createMobCompactorThreadPool(MobUtils.java:880)
at
org.apache.hadoop.hbase.master.MobCompactionChore.<init>(MobCompactionChore.java:51)
at org.apache.hadoop.hbase.master.HMaster.initMobCleaner(HMaster.java:1278)
at
org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:1161)
at
org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2112)
at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:580)
at java.lang.Thread.run(Thread.java:748)
2021-07-
22 18:54:13,760 INFO [master/JavaFuzz:16000:becomeActiveMaster]
regionserver.HRegionServer: ***** STOPPING region server
'javafuzz,16000,1626951243154' *****{code}
In MobUtils.java(package org.apache.hadoop.hbase.mob)
This method from version 2.2.0 to version 2.4.4 is the same
{code:java}
public static ExecutorService createMobCompactorThreadPool(Configuration
conf) { int maxThreads =
conf.getInt(MobConstants.MOB_COMPACTION_THREADS_MAX,
MobConstants.DEFAULT_MOB_COMPACTION_THREADS_MAX);
if (maxThreads == 0) {
maxThreads = 1;
}
final SynchronousQueue<Runnable> queue = new SynchronousQueue<>();
ThreadPoolExecutor pool = new ThreadPoolExecutor(1, maxThreads, 60,
TimeUnit.SECONDS, queue, Threads.newDaemonThreadFactory("MobCompactor"),
new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor)
{
try {
// waiting for a thread to pick up instead of throwing
exceptions.
queue.put(r);
} catch (InterruptedException e) {
throw new RejectedExecutionException(e);
}
}
});
((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);
return pool;
}{code}
When MOB_COMPACTION_THREADS_MAX is set to 0, mobUtil will set it to 1. But the
program does not take into account that it is set to a negative number. When it
is set to a negative number, the initialization of the ThreadPoolExecutor will
fail and an IllegalArgumentException will be thrown, making HMaster fail to
start.
Sometimes users will use -1 as the value of the default item in the
configuration file.
Therefore, it is best to modify the source code, when the value is negative,
also set its _maxThread_ to 1.
Only need to modify
if (maxThreads == 0) {
to
if (maxThreads <= 0) {
was:
In hbase-default.xml:
{code:java}
<property>
<name>hbase.mob.compaction.threads.max</name>
<value>1</value>
<description>
The max number of threads used in MobCompactor.
</description>
</property>{code}
When the value is set to a negative number, such as -1, Hmaster cannot start
normally.
The log file will output:
{code:cpp}
2021-07-22 18:54:13,758 ERROR [master/JavaFuzz:16000:becomeActiveMaster]
master.HMaster: Failed to become active master
java.lang.IllegalArgumentException
at
java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1314)
at
org.apache.hadoop.hbase.mob.MobUtils.createMobCompactorThreadPool(MobUtils.java:880)
at org.apache.hadoop.hbase.master.MobCompactionChore.<init>
(MobCompactionChore.java:51) at
org.apache.hadoop.hbase.master.HMaster.initMobCleaner(HMaster.java:1278)
at
org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:1161)
at
org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2112)
at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:580)
at java.lang.Thread.run(Thread.java:748)
2021-07-22 18:54:13,760 ERROR [master/JavaFuzz:16000:becomeActiveMaster]
master.HMaster: Master server abort: loaded coprocessors are:
[org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint]
2021-07-22 18:54:13,760 ERROR [master/JavaFuzz:16000:becomeActiveMaster]
master.HMaster: ***** ABORTING master javafuzz,16000,1626951243154: Unhandled
exception. Starting shutdown. ***** java.lang.IllegalArgumentException
at
java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1314)
at
org.apache.hadoop.hbase.mob.MobUtils.createMobCompactorThreadPool(MobUtils.java:880)
at
org.apache.hadoop.hbase.master.MobCompactionChore.<init>(MobCompactionChore.java:51)
at org.apache.hadoop.hbase.master.HMaster.initMobCleaner(HMaster.java:1278)
at
org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:1161)
at
org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2112)
at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:580)
at java.lang.Thread.run(Thread.java:748)
2021-07-
22 18:54:13,760 INFO [master/JavaFuzz:16000:becomeActiveMaster]
regionserver.HRegionServer: ***** STOPPING region server
'javafuzz,16000,1626951243154' *****{code}
In MobUtils.java(package org.apache.hadoop.hbase.mob)
This method from version 2.2.0 to version 2.4.4 is the same
{code:java}
public static ExecutorService createMobCompactorThreadPool(Configuration
conf) { int maxThreads =
conf.getInt(MobConstants.MOB_COMPACTION_THREADS_MAX,
MobConstants.DEFAULT_MOB_COMPACTION_THREADS_MAX);
if (maxThreads == 0) {
maxThreads = 1;
}
final SynchronousQueue<Runnable> queue = new SynchronousQueue<>();
ThreadPoolExecutor pool = new ThreadPoolExecutor(1, maxThreads, 60,
TimeUnit.SECONDS, queue, Threads.newDaemonThreadFactory("MobCompactor"),
new RejectedExecutionHandler() {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor)
{
try {
// waiting for a thread to pick up instead of throwing
exceptions.
queue.put(r);
} catch (InterruptedException e) {
throw new RejectedExecutionException(e);
}
}
});
((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);
return pool;
}{code}
When MOB_COMPACTION_THREADS_MAX is set to 0, mobUtil will set it to 1. But the
program does not take into account that it is set to a negative number. When it
is set to a negative number, the initialization of the ThreadPoolExecutor will
fail and an IllegalArgumentException will be thrown, making HMaster fail to
start.
Sometimes users will use -1 as the value of the default item in the
configuration file.
Therefore, it is best to modify the source code, when the value is negative,
also set its _maxThread_ to 1.
Only need to modify
if (maxThreads == 0) {
to
if (maxThreads <= 0) {
> when “hbase.mob.compaction.threads.max” is set to a negative number, HMaster
> cannot start normally
> ---------------------------------------------------------------------------------------------------
>
> Key: HBASE-26114
> URL: https://issues.apache.org/jira/browse/HBASE-26114
> Project: HBase
> Issue Type: Bug
> Components: master
> Affects Versions: 2.2.0, 2.4.4
> Environment: HBase 2.2.2
> os.name=Linux
> os.arch=amd64
> os.version=5.4.0-72-generic
> java.version=1.8.0_191
> java.vendor=Oracle Corporation
> Reporter: Jingxuan Fu
> Priority: Major
> Labels: patch
> Fix For: 3.0.0-alpha-1
>
> Original Estimate: 10m
> Remaining Estimate: 10m
>
> In hbase-default.xml:
>
> {code:java}
> <property>
> <name>hbase.mob.compaction.threads.max</name>
> <value>1</value>
> <description>
> The max number of threads used in MobCompactor.
> </description>
> </property>{code}
>
> When the value is set to a negative number, such as -1, Hmaster cannot start
> normally.
> The log file will output:
>
> {code:cpp}
> 2021-07-22 18:54:13,758 ERROR [master/JavaFuzz:16000:becomeActiveMaster]
> master.HMaster: Failed to become active master
> java.lang.IllegalArgumentException
> at
> java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1314)
> at
> org.apache.hadoop.hbase.mob.MobUtils.createMobCompactorThreadPool(MobUtils.java:880)
> at org.apache.hadoop.hbase.master.MobCompactionChore.<init>
> (MobCompactionChore.java:51) at
> org.apache.hadoop.hbase.master.HMaster.initMobCleaner(HMaster.java:1278)
> at
> org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:1161)
>
> at
> org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2112)
> at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:580)
> at java.lang.Thread.run(Thread.java:748)
> 2021-07-22 18:54:13,760 ERROR [master/JavaFuzz:16000:becomeActiveMaster]
> master.HMaster: Master server abort: loaded coprocessors are:
> [org.apache.hadoop.hbase.coprocessor.MultiRowMutationEndpoint]
> 2021-07-22 18:54:13,760 ERROR [master/JavaFuzz:16000:becomeActiveMaster]
> master.HMaster: ***** ABORTING master javafuzz,16000,1626951243154: Unhandled
> exception. Starting shutdown. ***** java.lang.IllegalArgumentException
> at
> java.util.concurrent.ThreadPoolExecutor.<init>(ThreadPoolExecutor.java:1314)
> at
> org.apache.hadoop.hbase.mob.MobUtils.createMobCompactorThreadPool(MobUtils.java:880)
>
> at
> org.apache.hadoop.hbase.master.MobCompactionChore.<init>(MobCompactionChore.java:51)
>
> at org.apache.hadoop.hbase.master.HMaster.initMobCleaner(HMaster.java:1278)
> at
> org.apache.hadoop.hbase.master.HMaster.finishActiveMasterInitialization(HMaster.java:1161)
>
> at
> org.apache.hadoop.hbase.master.HMaster.startActiveMasterManager(HMaster.java:2112)
>
> at org.apache.hadoop.hbase.master.HMaster.lambda$run$0(HMaster.java:580)
> at java.lang.Thread.run(Thread.java:748)
> 2021-07-
> 22 18:54:13,760 INFO [master/JavaFuzz:16000:becomeActiveMaster]
> regionserver.HRegionServer: ***** STOPPING region server
> 'javafuzz,16000,1626951243154' *****{code}
>
> In MobUtils.java(package org.apache.hadoop.hbase.mob)
> This method from version 2.2.0 to version 2.4.4 is the same
> {code:java}
> public static ExecutorService createMobCompactorThreadPool(Configuration
> conf) { int maxThreads =
> conf.getInt(MobConstants.MOB_COMPACTION_THREADS_MAX,
> MobConstants.DEFAULT_MOB_COMPACTION_THREADS_MAX);
> if (maxThreads == 0) {
> maxThreads = 1;
> }
> final SynchronousQueue<Runnable> queue = new SynchronousQueue<>();
> ThreadPoolExecutor pool = new ThreadPoolExecutor(1, maxThreads, 60,
> TimeUnit.SECONDS, queue,
> Threads.newDaemonThreadFactory("MobCompactor"), new
> RejectedExecutionHandler() {
> @Override
> public void rejectedExecution(Runnable r, ThreadPoolExecutor
> executor) {
> try {
> // waiting for a thread to pick up instead of throwing
> exceptions.
> queue.put(r);
> } catch (InterruptedException e) {
> throw new RejectedExecutionException(e);
> }
> }
> });
> ((ThreadPoolExecutor) pool).allowCoreThreadTimeOut(true);
> return pool;
> }{code}
> When MOB_COMPACTION_THREADS_MAX is set to 0, mobUtil will set it to 1. But
> the program does not take into account that it is set to a negative number.
> When it is set to a negative number, the initialization of the
> ThreadPoolExecutor will fail and an IllegalArgumentException will be thrown,
> making HMaster fail to start.
> Sometimes users will use -1 as the value of the default item in the
> configuration file.
> Therefore, it is best to modify the source code, when the value is negative,
> also set its _maxThread_ to 1.
> Only need to modify
> if (maxThreads == 0) {
> to
> if (maxThreads <= 0) {
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)