Author: gdusbabek
Date: Thu Dec 30 13:52:57 2010
New Revision: 1053890

URL: http://svn.apache.org/viewvc?rev=1053890&view=rev
Log:
CFS.scrubDataDirectories should also cleanup invalid secondary indexes. patch 
by gdusbabek, reviewed by jbellis. CASSANDRA-1904

Modified:
    
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/config/CFMetaData.java
    
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/io/sstable/SSTable.java

Modified: 
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/config/CFMetaData.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/config/CFMetaData.java?rev=1053890&r1=1053889&r2=1053890&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/config/CFMetaData.java
 (original)
+++ 
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/config/CFMetaData.java
 Thu Dec 30 13:52:57 2010
@@ -267,11 +267,11 @@ public final class CFMetaData
              nextId(),
              column_metadata);
     }
-
+    
     public static CFMetaData newIndexMetadata(String table, String parentCf, 
ColumnDefinition info, AbstractType columnComparator)
     {
         return new CFMetaData(table,
-                              parentCf + "." + (info.getIndexName() == null ? 
FBUtilities.bytesToHex(info.name) : info.getIndexName()),
+                              indexName(parentCf, info),
                               ColumnFamilyType.Standard,
                               columnComparator,
                               null,
@@ -346,6 +346,12 @@ public final class CFMetaData
     {
         cfIdMap.remove(new Pair<String, String>(cfm.tableName, cfm.cfName));
     }
+    
+    /** convention for nameing secondary indexes. */
+    public static String indexName(String parentCf, ColumnDefinition info)
+    {
+        return parentCf + "." + (info.getIndexName() == null ? 
FBUtilities.bytesToHex(info.name) : info.getIndexName());
+    }
 
     public org.apache.cassandra.avro.CfDef deflate()
     {

Modified: 
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1053890&r1=1053889&r2=1053890&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 (original)
+++ 
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 Thu Dec 30 13:52:57 2010
@@ -498,6 +498,14 @@ public class ColumnFamilyStore implement
                     if (!file.delete())
                         logger.warn("could not delete " + 
file.getAbsolutePath());
         }
+        
+        // also clean out any index leftovers.
+        CFMetaData cfm = DatabaseDescriptor.getCFMetaData(table, columnFamily);
+        if (cfm != null) // secondary indexes aren't stored in DD.
+        {
+            for (ColumnDefinition def : cfm.getColumn_metadata().values())
+                scrubDataDirectories(table, CFMetaData.indexName(cfm.cfName, 
def));
+        }
     }
 
     // must be called after all sstables are loaded since row cache merges all 
row versions

Modified: 
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/io/sstable/SSTable.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/io/sstable/SSTable.java?rev=1053890&r1=1053889&r2=1053890&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/io/sstable/SSTable.java
 (original)
+++ 
cassandra/branches/cassandra-0.7.0/src/java/org/apache/cassandra/io/sstable/SSTable.java
 Thu Dec 30 13:52:57 2010
@@ -230,6 +230,7 @@ public abstract class SSTable
             ifile.skipBytes(8);
             keys++;
         }
+        assert keys > 0 && ifile.getFilePointer() > 0 && ifile.length() > 0;
         long estimatedRows = ifile.length() / (ifile.getFilePointer() / keys);
         ifile.seek(0);
         return estimatedRows;


Reply via email to