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

StorageService.move() throws RuntimeException when interrupted

    XMLWordPrintableJSON

    Details

    • 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 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/service/StorageService.java

      Line: 4168

      try
      {
          relocator.stream().get();
      }
      catch (ExecutionException | InterruptedException e)
      {
          throw new RuntimeException("Interrupted while waiting for stream/fetch ranges to finish: " + e.getMessage());
      }
      

       

      RuntimeException is usually used to represent errors in the program logic (think of one of its subclasses, NullPointerException), while the error message indicates that an interrupt has occurred. This mismatch could be a problem. For example, the callers may miss the possibility that StorageService.move() can be interrupted because it does not throw any InterruptedException. Or, the callers trying to handle other RuntimeException may accidentally (and incorrectly) handle the interrupt.

       

      If throwing a RuntimeException is preferred, maybe it can wrap the cause exception so that the inner call stack is preserved.

        Attachments

          Activity

            People

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

              Dates

              • Created:
                Updated: