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());
}