Dear Cassandra developers, we are developing a tool to detect
exception-related bugs in Java. Our prototype has spotted the following two
throw statements whose exception class and error message indicate different
error conditions.



Version: Cassandra-3.11 (commit: 123113f7b887370a248669ee0db6fdf13df0146e)

File:
CASSANDRA-ROOT/src/java/org/apache/cassandra/db/compaction/writers/CompactionAwareWriter.java

Line: 222 & 231

if (availableSpace < estimatedWriteSize)
    throw new RuntimeException(String.format("Not enough space to
write %s to %s (%s available)",

FBUtilities.prettyPrintMemory(estimatedWriteSize),
                                             d.location,

FBUtilities.prettyPrintMemory(availableSpace)));

d = getDirectories().getWriteableLocation(estimatedWriteSize);if (d == null)
    throw new RuntimeException(String.format("Not enough disk space to
store %s",

FBUtilities.prettyPrintMemory(estimatedWriteSize)));



RuntimeException is usually used to represent errors in the program logic
(think of one of its subclasses, NullPointerException), while the error
messages indicate that the Cassandra node is running out of disk space.
This mismatch could be a problem. For example, the callers may miss the
possibility that getWriteDirectory() can run out of disk space because it
does not throw an accurate exception class (e.g., CASSANDRA-11448
<https://issues.apache.org/jira/browse/CASSANDRA-11448>). Or, the callers
trying to handle other RuntimeException may accidentally (and incorrectly)
handle the out of disk space scenario.


Do you think this is a bug?


Thanks!

Reply via email to