Dear Cassandra developers, we are developing a tool to detect
exception-related bugs in Java. Our prototype has spotted the following
throw statement whose exception class and error message indicate different
error conditions.
Version: Cassandra-3.11 (commit: 123113f7b887370a248669ee0db6fdf13df0146e)
File:
CASSANDRA-ROOT/src/java/org/apache/cassandra/utils/obs/OffHeapBitSet.java
Line: 49
try
{
long byteCount = wordCount * 8L;
bytes = Memory.allocate(byteCount);
}
catch (OutOfMemoryError e)
{
throw new RuntimeException("Out of native memory occured, You can
avoid it by increasing the system ram space or by increasing
bloom_filter_fp_chance.");
}
RuntimeException is usually used to represent errors in the program logic
(think of one of its subclasses, NullPointerException), while the error
message indicates that OffHeapBitSet() ran out of memory. This mismatch
could be a problem. For example, the callers may miss the possibility that
OffHeapBitSet() can run out of memory. Or, the callers trying to handle
other RuntimeException may accidentally (and incorrectly) handle the out of
memory scenario.
Do you think this is a bug?
Thanks!