You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "ConfX (Jira)" <ji...@apache.org> on 2023/07/27 14:51:00 UTC

[jira] [Created] (HBASE-27993) AbstractFSWAL causes ArithmeticException due to improper logRollSize value checking

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)