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/db/WindowsFailedSnapshotTracker.java
Line: 98
try
{
_failedSnapshotFile = new PrintWriter(new FileWriter(TODELETEFILE, true));
}
catch (IOException e)
{
throw new RuntimeException(String.format("Failed to create failed
snapshot tracking file [%s]. Aborting", TODELETEFILE));
}
RuntimeException is usually used to represent errors in the program logic
(think of one of its subclasses, NullPointerException), while the error
message indicates that deleteOldSnapshots() failed to create a file. This
mismatch could be a problem. For example, the callers may miss the
possibility that deleteOldSnapshots() can fail to create a file because it
does not throw any IOException. Or, the callers trying to handle other
RuntimeException may accidentally (and incorrectly) handle the file
creation failure.
Do you think this is a bug?
Thanks!