ConfX created HBASE-27990:
-----------------------------

             Summary: BucketCache causes ArithmeticException due to improper 
blockSize value checking 
                 Key: HBASE-27990
                 URL: https://issues.apache.org/jira/browse/HBASE-27990
             Project: HBase
          Issue Type: Bug
            Reporter: ConfX
         Attachments: reproduce.sh

h2. What happened

There is no value checking for parameter {{{}hbase.blockcache.minblocksize{}}}. 
This may cause improper calculations and crashes the system like division by 0.
h2. Buggy code

In {{{}BucketCache.java{}}}, there is no value checking for {{blockSize}} and 
this variable is directly used to calculate the {{{}blockNumCapacity{}}}. When 
{{blockSize}} is mistakenly set to 0, the code would cause division by 0 and 
throw ArithmeticException to crash the system.
{noformat}
  public BucketCache(String ioEngineName, long capacity, int blockSize, int[] 
bucketSizes,
    int writerThreadNum, int writerQLen, String persistencePath, int 
ioErrorsTolerationDuration,
    Configuration conf) throws IOException {
    ...
    long blockNumCapacity = capacity / blockSize;
    ...{noformat}
h2. How to reproduce

(1) set hbase.blockcache.minblocksize=0
(2) run 
org.apache.hadoop.hbase.io.hfile.TestCacheConfig#testBucketCacheConfigL1L2Setup

you should observe the following failure:
{noformat}
java.lang.ArithmeticException: / by zero
    at 
org.apache.hadoop.hbase.io.hfile.bucket.BucketCache.<init>(BucketCache.java:282)
    at 
org.apache.hadoop.hbase.io.hfile.BlockCacheFactory.createBucketCache(BlockCacheFactory.java:238)
    at 
org.apache.hadoop.hbase.io.hfile.BlockCacheFactory.createBlockCache(BlockCacheFactory.java:110)
    at 
org.apache.hadoop.hbase.io.hfile.TestCacheConfig.testBucketCacheConfigL1L2Setup(TestCacheConfig.java:325)
        ...{noformat}
For an easy reproduction, run the reproduce.sh in the attachment.

We are happy to provide a patch if this issue is confirmed.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to