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

Remove invalid SSTables from interrupted compaction

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Low
    • Resolution: Unresolved
    • None
    • Local/Compaction
    • None
    • Low

    Description

      If the JVM crash while compaction is in progress, the incompleted SSTable won't be cleaned up, which causes "Stats component is missing for sstable" error in the startup log:

      ERROR [SSTableBatchOpen:3] 2018-03-11 00:17:35,597 CassandraDaemon.java:207 - Exception in thread Thread[SSTableBatchOpen:3,5,main]
      java.lang.AssertionError: Stats component is missing for sstable /cassandra/data/keyspace/table-id/mc-12345-big
          at org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:458) ~[apache-cassandra-3.0.14.jar:3.0.14]
          at org.apache.cassandra.io.sstable.format.SSTableReader.open(SSTableReader.java:374) ~[apache-cassandra-3.0.14.jar:3.0.14]
          at org.apache.cassandra.io.sstable.format.SSTableReader$4.run(SSTableReader.java:533) ~[apache-cassandra-3.0.14.jar:3.0.14]
          at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_121]
          at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_121]
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_121]
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_121]
          at org.apache.cassandra.concurrent.NamedThreadFactory.lambda$threadLocalDeallocator$0(NamedThreadFactory.java:79) [apache-cassandra-3.0.14.jar:3.0.14]
          at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_121]
      

      The accumulated incompleted SSTables could take lots of space, especially for STCS which could have very large SSTables.
      Here is the script we use to delete the SSTables after node is restarted:

      grep 'Stats component is missing for sstable' $SYSTEM_LOG | awk '{print $8}' > ~/invalid_sstables ; for ss in `cat ~/invalid_sstables`; do echo == $ss; ll $ss*; sudo rm $ss* ; done
      

      I would suggest to remove these incompleted SSTables while startup.

      Attachments

        Activity

          People

            jay.zhuang Jay Zhuang
            jay.zhuang Jay Zhuang
            Jay Zhuang
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated: