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;