You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2009/11/02 20:38:25 UTC

svn commit: r832075 - /incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java

Author: jbellis
Date: Mon Nov  2 19:38:25 2009
New Revision: 832075

URL: http://svn.apache.org/viewvc?rev=832075&view=rev
Log:
scan on startup for orphaned filter and index files and remove them.
patch by Gary Dusbabek; reviewed by jbellis for CASSANDRA-432

Modified:
    incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java

Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=832075&r1=832074&r2=832075&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Mon Nov  2 19:38:25 2009
@@ -37,6 +37,9 @@
 import org.apache.cassandra.dht.Range;
 import org.apache.cassandra.io.*;
 import java.net.InetAddress;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import org.apache.cassandra.service.StorageService;
 import org.apache.cassandra.utils.*;
 import org.apache.cassandra.concurrent.DebuggableThreadPoolExecutor;
@@ -175,6 +178,7 @@
             logger_.debug("Starting CFS " + columnFamily_);
         // scan for data files corresponding to this CF
         List<File> sstableFiles = new ArrayList<File>();
+        Pattern auxFilePattern = Pattern.compile("(.*)(-Filter\\.db$|-Index\\.db$)");
         String[] dataFileDirectories = DatabaseDescriptor.getAllDataFileLocationsForTable(table_);
         for (String directory : dataFileDirectories)
         {
@@ -183,15 +187,28 @@
             for (File file : files)
             {
                 String filename = file.getName();
+
+                /* look for and remove orphans. An orphan is a -Filter.db or -Index.db with no corresponding -Data.db. */
+                Matcher matcher = auxFilePattern.matcher(file.getAbsolutePath());
+                if (matcher.matches())
+                {
+                    String basePath = matcher.group(1);
+                    if (!new File(basePath + "-Data.db").exists())
+                    {
+                        logger_.info(String.format("Removing orphan %s", file.getAbsolutePath()));
+                        FileUtils.deleteWithConfirm(file);
+                        continue;
+                    }
+                }
+
                 if (((file.length() == 0 && !filename.endsWith("-Compacted")) || (filename.contains("-" + SSTable.TEMPFILE_MARKER))) && (filename.contains(columnFamily_)))
                 {
-                    file.delete();
+                    FileUtils.deleteWithConfirm(file);
                     continue;
                 }
 
                 String cfName = getColumnFamilyFromFileName(filename);
-                if (cfName.equals(columnFamily_)
-                    && filename.contains("-Data.db"))
+                if (cfName.equals(columnFamily_) && filename.contains("-Data.db"))
                 {
                     sstableFiles.add(file.getAbsoluteFile());
                 }