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

CompactionAwareWriter_getWriteDirectory throws incompatible exceptions

    XMLWordPrintableJSON

Details

    • Bug
    • Status: In Progress
    • Normal
    • Resolution: Unresolved
    • None
    • Local/Compaction
    • Normal
    • Low Hanging Fruit

    Description

      The CompactionAwareWriter_getWriteDirectory throws RuntimeException:

      public Directories.DataDirectory getWriteDirectory(Iterable<SSTableReader> sstables, long estimatedWriteSize)
          {
              File directory = null;
              for (SSTableReader sstable : sstables)
              {
                  if (directory == null)
                      directory = sstable.descriptor.directory;
                  if (!directory.equals(sstable.descriptor.directory))
                  {
                      logger.trace("All sstables not from the same disk - putting results in {}", directory);
                      break;
                  }
              }
              Directories.DataDirectory d = getDirectories().getDataDirectoryForFile(directory);
              if (d != null)
              {
                  long availableSpace = d.getAvailableSpace();
                  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)));
                  logger.trace("putting compaction results in {}", directory);
                  return d;
              }
              d = getDirectories().getWriteableLocation(estimatedWriteSize);
              if (d == null)
                  throw new RuntimeException(String.format("Not enough disk space to store %s",
                                                           FBUtilities.prettyPrintMemory(estimatedWriteSize)));
              return d;
          }
      

      However, the thrown exception does not trigger the failure policy. CASSANDRA-11448 fixed a similar problem. The buggy code is:

      protected Directories.DataDirectory getWriteDirectory(long writeSize)
          {
              Directories.DataDirectory directory = getDirectories().getWriteableLocation(writeSize);
              if (directory == null)
                  throw new RuntimeException("Insufficient disk space to write " + writeSize + " bytes");
      
              return directory;
          }
      

      The fixed code is:

      protected Directories.DataDirectory getWriteDirectory(long writeSize)
          {
              Directories.DataDirectory directory = getDirectories().getWriteableLocation(writeSize);
              if (directory == null)
                  throw new FSWriteError(new IOException("Insufficient disk space to write " + writeSize + " bytes"), "");
      
              return directory;
          }
      

      The fixed code throws FSWE and triggers the failure policy.

      Attachments

        1. c13692-testall-results-updated.PNG
          177 kB
          Dimitar Dimitrov
        2. c13692-testall-results.PNG
          157 kB
          Dimitar Dimitrov
        3. c13692-dtest-results-updated.PNG
          192 kB
          Dimitar Dimitrov
        4. c13692-dtest-results.PNG
          176 kB
          Dimitar Dimitrov
        5. c13692-3.11-testall-results.PNG
          159 kB
          Dimitar Dimitrov
        6. c13692-3.11-dtest-results-updated.PNG
          160 kB
          Dimitar Dimitrov
        7. c13692-3.11-dtest-results.PNG
          173 kB
          Dimitar Dimitrov
        8. c13692-3.0-testall-results.PNG
          152 kB
          Dimitar Dimitrov
        9. c13692-3.0-dtest-results-updated.PNG
          165 kB
          Dimitar Dimitrov
        10. c13692-3.0-dtest-results.PNG
          186 kB
          Dimitar Dimitrov
        11. c13692-2.2-testall-results.PNG
          153 kB
          Dimitar Dimitrov
        12. c13692-2.2-dtest-results.PNG
          149 kB
          Dimitar Dimitrov

        Activity

          People

            dimitarndimitrov Dimitar Dimitrov
            haozhong Hao Zhong
            Dimitar Dimitrov
            Joel Knighton
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated: