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):


Reply via email to