Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-15114

Cassandra does not follow user's disk_failure_policy when getWriteDirectory() runs out of disk space

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Triage Needed
    • Priority: Low
    • Resolution: Unresolved
    • Fix Version/s: 4.x
    • Component/s: None
    • Labels:
      None
    • Severity:
      Low
    • Complexity:
      Low Hanging Fruit
    • Discovered By:
      User Report
    • Platform:
      All
    • Impacts:
      None

      Description

      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). Or, the callers trying to handle other RuntimeException may accidentally (and incorrectly) handle the out of disk space scenario.

        Attachments

          Activity

            People

            • Assignee:
              jmeredithco Jon Meredith
              Reporter:
              ebugs-in-cloud-systems Haicheng Chen
              Authors:
              Jon Meredith
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated: