ConfX created HBASE-27989: ----------------------------- Summary: ByteBuffAllocator causes ArithmeticException due to improper poolBufSize value checking Key: HBASE-27989 URL: https://issues.apache.org/jira/browse/HBASE-27989 Project: HBase Issue Type: Bug Reporter: ConfX Attachments: reproduce.sh
h3. What happened There is no value checking for parameter {{{}hbase.server.allocator.buffer.size{}}}. This may cause improper calculations and crashes the system like division by 0. h3. Buggy code In {{{}ByteBuffAllocator.java{}}}, there is no value checking for {{poolBufSize}} and this variable is directly used to calculate the {{{}bufsForTwoMB{}}}. When {{poolBufSize}} is mistakenly set to 0, the code would cause division by 0 and throw ArithmeticException to crash the system. {noformat} public static ByteBuffAllocator create(Configuration conf, boolean reservoirEnabled) { int poolBufSize = conf.getInt(BUFFER_SIZE_KEY, DEFAULT_BUFFER_SIZE); if (reservoirEnabled) { . . . int bufsForTwoMB = (2 * 1024 * 1024) / poolBufSize; . . .{noformat} h3. How to reproduce # set hbase.server.allocator.buffer.size=0 run # org.apache.hadoop.hbase.io.hfile.bucket.TestBucketCacheRefCnt#testInBucketCache # you should observe the following failure: {noformat} java.lang.ArithmeticException: / by zero at org.apache.hadoop.hbase.io.ByteBuffAllocator.create(ByteBuffAllocator.java:174) at org.apache.hadoop.hbase.io.hfile.bucket.TestBucketCacheRefCnt.testInBucketCache(TestBucketCacheRefCnt.java:224) . . .{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)