Author: goffinet
Date: Tue May 31 02:08:39 2011
New Revision: 1129462
URL: http://svn.apache.org/viewvc?rev=1129462&view=rev
Log:
Fixed rows being cached if they do not exist.
patch by goffinet; reviewed by stuhood for CASSANDRA-2723
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1129462&r1=1129461&r2=1129462&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
(original)
+++
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
Tue May 31 02:08:39 2011
@@ -1186,7 +1186,10 @@ public class ColumnFamilyStore implement
if (rowCache.getCapacity() == 0)
{
ColumnFamily cf = getTopLevelColumns(filter, gcBefore);
-
+
+ if (cf == null)
+ return null;
+
// TODO this is necessary because when we collate supercolumns
together, we don't check
// their subcolumns for relevance, so we need to do a second
prune post facto here.
return cf.isSuper() ? removeDeleted(cf, gcBefore) :
removeDeletedCF(cf, gcBefore);
@@ -1297,14 +1300,17 @@ public class ColumnFamilyStore implement
recentSSTablesPerRead.add(sstablesToIterate);
sstablesPerRead.add(sstablesToIterate);
+ // we need to distinguish between "there is no data at all for
this row" (BF will let us rebuild that efficiently)
+ // and "there used to be data, but it's gone now" (we should cache
the empty CF so we don't need to rebuild that slower)
+ if (iterators.size() == 0)
+ return null;
+
Comparator<IColumn> comparator =
filter.filter.getColumnComparator(getComparator());
Iterator collated = IteratorUtils.collatedIterator(comparator,
iterators);
filter.collectCollatedColumns(returnCF, collated, gcBefore);
// Caller is responsible for final removeDeletedCF. This is
important for cacheRow to work correctly:
- // we need to distinguish between "there is no data at all for
this row" (BF will let us rebuild that efficiently)
- // and "there used to be data, but it's gone now" (we should cache
the empty CF so we don't need to rebuild that slower)
return returnCF;
}
finally