ConfX created HBASE-27993:
-----------------------------
Summary: AbstractFSWAL causes ArithmeticException due to improper
logRollSize value checking
Key: HBASE-27993
URL: https://issues.apache.org/jira/browse/HBASE-27993
Project: HBase
Issue Type: Bug
Reporter: ConfX
Attachments: reproduce.sh
h2. What happened
There is no value checking for parameter
{{hbase.regionserver.logroll.multiplier}} when {{hbase.wal.provider}} is set to
{{{}multiwal{}}}. This may cause improper calculations and crashes the system
like division by 0.
h2. Buggy code
In {{{}AbstractFSWAL.java{}}}, there is no value checking for {{logRollSize }}
and this variable is directly used while calculating the value of maxLogFiles
in the method {{{}calculateMaxLogFiles{}}}. When {{logRollSize }} is mistakenly
set to 0, the code would cause division by 0 and throw ArithmeticException to
crash the system.
{noformat}
private int calculateMaxLogFiles(Configuration conf, long logRollSize) {
Pair<Long, MemoryType> globalMemstoreSize =
MemorySizeUtil.getGlobalMemStoreSize(conf);
return (int) ((globalMemstoreSize.getFirst() * 2) / logRollSize);
}{noformat}
h2. How to reproduce
(1) set hbase.regionserver.logroll.multiplier=0.0 and
hbase.wal.provider=multiwal
(2) run org.apache.hadoop.hbase.wal.TestWALMethods#testGetSplitEditFilesSorted
you should observe the following failure:
{noformat}
java.lang.ArithmeticException: / by zero
at
org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.calculateMaxLogFiles(AbstractFSWAL.java:466)
at
org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.<init>(AbstractFSWAL.java:594)
at
org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.<init>(AsyncFSWAL.java:141)
. . .{noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)