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

CompactionAwareWriter_getWriteDirectory throws incompatible exceptions

Log workAgile BoardRank to TopRank to BottomAttach filesAttach ScreenshotBulk Copy AttachmentsBulk Move AttachmentsAdd voteVotersWatch issueWatchersCreate sub-taskConvert to sub-taskMoveLinkCloneLabelsUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    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-3.0-dtest-results.PNG
          186 kB
          Dimitar Dimitrov
        2. c13692-2.2-dtest-results.PNG
          149 kB
          Dimitar Dimitrov
        3. c13692-3.0-testall-results.PNG
          152 kB
          Dimitar Dimitrov
        4. c13692-2.2-testall-results.PNG
          153 kB
          Dimitar Dimitrov
        5. c13692-3.11-testall-results.PNG
          159 kB
          Dimitar Dimitrov
        6. c13692-3.11-dtest-results.PNG
          173 kB
          Dimitar Dimitrov
        7. c13692-dtest-results.PNG
          176 kB
          Dimitar Dimitrov
        8. c13692-testall-results.PNG
          157 kB
          Dimitar Dimitrov
        9. c13692-3.0-dtest-results-updated.PNG
          165 kB
          Dimitar Dimitrov
        10. c13692-3.11-dtest-results-updated.PNG
          160 kB
          Dimitar Dimitrov
        11. c13692-dtest-results-updated.PNG
          192 kB
          Dimitar Dimitrov
        12. c13692-testall-results-updated.PNG
          177 kB
          Dimitar Dimitrov

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            dimitarndimitrov Dimitar Dimitrov Assign to me
            haozhong Hao Zhong
            Dimitar Dimitrov
            Joel Knighton

            Dates

              Created:
              Updated:

              Slack

                Issue deployment