Author: jbellis
Date: Tue Sep 28 04:26:24 2010
New Revision: 1002011
URL: http://svn.apache.org/viewvc?rev=1002011&view=rev
Log:
support TTL'd index values.
patch by Stu Hood; reviewed by jbellis for CASSANDRA-1536
Modified:
cassandra/trunk/CHANGES.txt
cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
cassandra/trunk/test/system/test_thrift_server.py
Modified: cassandra/trunk/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1002011&r1=1002010&r2=1002011&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Tue Sep 28 04:26:24 2010
@@ -6,6 +6,7 @@ dev
multiple Cassandra nodes, and smooth impact on the Cassandra cluster
by using smaller batch sizes (CASSANDRA-1434)
* fix setting gc_grace_seconds via CLI (CASSANDRA-1549)
+ * support TTL'd index values (CASSANDRA-1536)
0.7-beta2
Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=1002011&r1=1002010&r2=1002011&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Tue Sep 28
04:26:24 2010
@@ -441,7 +441,13 @@ public class Table
IColumn column = cf.getColumn(columnName);
DecoratedKey<LocalToken> valueKey = cfs.getIndexKeyFor(columnName,
column.value());
ColumnFamily cfi = cfs.newIndexedColumnFamily(columnName);
- cfi.addColumn(new Column(key, ArrayUtils.EMPTY_BYTE_ARRAY,
column.clock()));
+ if (column instanceof ExpiringColumn)
+ {
+ ExpiringColumn ec = (ExpiringColumn)column;
+ cfi.addColumn(new ExpiringColumn(key,
ArrayUtils.EMPTY_BYTE_ARRAY, ec.clock(), ec.getTimeToLive(),
ec.getLocalDeletionTime()));
+ }
+ else
+ cfi.addColumn(new Column(key, ArrayUtils.EMPTY_BYTE_ARRAY,
column.clock()));
Memtable fullMemtable =
cfs.getIndexedColumnFamilyStore(columnName).apply(valueKey, cfi);
if (fullMemtable != null)
fullMemtables = addFullMemtable(fullMemtables, fullMemtable);
Modified: cassandra/trunk/test/system/test_thrift_server.py
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/system/test_thrift_server.py?rev=1002011&r1=1002010&r2=1002011&view=diff
==============================================================================
--- cassandra/trunk/test/system/test_thrift_server.py (original)
+++ cassandra/trunk/test/system/test_thrift_server.py Tue Sep 28 04:26:24 2010
@@ -1441,7 +1441,20 @@ class TestMutations(ThriftTester):
assert result[0].key == 'key3'
assert len(result[0].columns) == 2, result[0].columns
-
+ def test_index_scan_expiring(self):
+ """ Test that column ttled expires from KEYS index"""
+ _set_keyspace('Keyspace1')
+ client.insert('key1', ColumnParent('Indexed1'), Column('birthdate',
_i64(1), 0, 1), ConsistencyLevel.ONE)
+ cp = ColumnParent('Indexed1')
+ sp = SlicePredicate(slice_range=SliceRange('', ''))
+ clause = IndexClause([IndexExpression('birthdate', IndexOperator.EQ,
_i64(1))], '')
+ # query before expiration
+ result = client.get_indexed_slices(cp, clause, sp,
ConsistencyLevel.ONE)
+ assert len(result) == 1, result
+ # wait for expiration and requery
+ time.sleep(2)
+ result = client.get_indexed_slices(cp, clause, sp,
ConsistencyLevel.ONE)
+ assert len(result) == 0, result
class TestTruncate(ThriftTester):
def test_truncate(self):