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 2010/11/15 15:21:43 UTC
svn commit: r1035286 - in /cassandra/branches/cassandra-0.7: CHANGES.txt
src/java/org/apache/cassandra/db/ColumnFamilyStore.java
src/java/org/apache/cassandra/db/RowIteratorFactory.java
test/system/test_thrift_server.py
Author: jbellis
Date: Mon Nov 15 14:21:43 2010
New Revision: 1035286
URL: http://svn.apache.org/viewvc?rev=1035286&view=rev
Log:
fix tombstoning of supercolumns in range queries
patch by jbellis; reviewed by tjake for CASSANDRA-1734
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/RowIteratorFactory.java
cassandra/branches/cassandra-0.7/test/system/test_thrift_server.py
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1035286&r1=1035285&r2=1035286&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Mon Nov 15 14:21:43 2010
@@ -1,5 +1,4 @@
dev
-0.6.9
* add clustertool, config-converter, sstablekeys, and schematool
Windows .bat files (CASSANDRA-1723)
* reject range queries received during bootstrap (CASSANDRA-1739)
@@ -29,6 +28,7 @@ dev
* add read repair chance to cli "show keyspaces"
* upgrade to ConcurrentLinkedHashMap 1.1 (CASSANDRA-975)
* fix index scan routing (CASSANDRA-1722)
+ * fix tombstoning of supercolumns in range queries (CASSANDRA-1734)
0.7.0-beta3
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1035286&r1=1035285&r2=1035286&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Mon Nov 15 14:21:43 2010
@@ -1212,12 +1212,13 @@ public class ColumnFamilyStore implement
Iterables.addAll(sstables, ssTables);
RowIterator iterator = RowIteratorFactory.getIterator(memtables, sstables, startWith, stopAt, filter, getComparator(), this);
+ int gcBefore = (int)(System.currentTimeMillis() / 1000) - metadata.gcGraceSeconds;
try
{
// pull rows out of the iterator
boolean first = true;
- while(iterator.hasNext())
+ while (iterator.hasNext())
{
Row current = iterator.next();
DecoratedKey key = current.key;
@@ -1228,7 +1229,11 @@ public class ColumnFamilyStore implement
// skip first one
if(range instanceof Bounds || !first || !key.equals(startWith))
{
- rows.add(current);
+ // 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.
+ rows.add(current.cf != null && current.cf.isSuper()
+ ? new Row(current.key, removeDeleted(current.cf, gcBefore))
+ : current);
if (logger.isDebugEnabled())
logger.debug("scanned " + key);
}
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/RowIteratorFactory.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/RowIteratorFactory.java?rev=1035286&r1=1035285&r2=1035286&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/RowIteratorFactory.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/RowIteratorFactory.java Mon Nov 15 14:21:43 2010
@@ -135,7 +135,7 @@ public class RowIteratorFactory
if (cached != null)
{
QueryFilter keyFilter = new QueryFilter(key, filter.path, filter.filter);
- returnCF = cfs.filterColumnFamily(cached, keyFilter, cfs.metadata.gcGraceSeconds);
+ returnCF = cfs.filterColumnFamily(cached, keyFilter, gcBefore);
}
else
{
Modified: cassandra/branches/cassandra-0.7/test/system/test_thrift_server.py
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/system/test_thrift_server.py?rev=1035286&r1=1035285&r2=1035286&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/system/test_thrift_server.py (original)
+++ cassandra/branches/cassandra-0.7/test/system/test_thrift_server.py Mon Nov 15 14:21:43 2010
@@ -728,6 +728,18 @@ class TestMutations(ThriftTester):
assert _big_slice('key1', ColumnParent('Super1', 'sc1')) == []
+ def test_super_cf_remove_and_range_slice(self):
+ _set_keyspace('Keyspace1')
+
+ client.insert('key3', ColumnParent('Super1', 'sc1'), Column(_i64(1), 'v1', 0), ConsistencyLevel.ONE)
+ client.remove('key3', ColumnPath('Super1', 'sc1'), 5, ConsistencyLevel.ONE)
+
+ rows = {}
+ for row in get_range_slice(client, ColumnParent('Super1'), SlicePredicate(slice_range=SliceRange('', '', False, 1000)), '', '', 1000, ConsistencyLevel.ONE):
+ scs = [cosc.super_column for cosc in row.columns]
+ rows[row.key] = scs
+ assert rows == {'key3': []}, rows
+
def test_super_cf_remove_column(self):
_set_keyspace('Keyspace1')
_insert_simple()