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)