Author: jbellis
Date: Sun Sep  5 03:30:55 2010
New Revision: 992710

URL: http://svn.apache.org/viewvc?rev=992710&view=rev
Log:
apply reversed flag during collation from different data sources.  patch by 
jbellis; reviewed by brandonwilliams for CASSANDRA-1450

Modified:
    cassandra/trunk/CHANGES.txt
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    cassandra/trunk/src/java/org/apache/cassandra/db/RowIteratorFactory.java
    cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java

Modified: cassandra/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=992710&r1=992709&r2=992710&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Sun Sep  5 03:30:55 2010
@@ -51,6 +51,8 @@ dev
    (CASSANDRA-1368)
  * Move persistent sstable stats from the system table to an sstable component
    (CASSANDRA-1430)
+ * apply reversed flag during collation from different data sources
+   (CASSANDRA-1450)
 
 
 0.7-beta1

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=992710&r1=992709&r2=992710&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Sun 
Sep  5 03:30:55 2010
@@ -894,7 +894,7 @@ public class ColumnFamilyStore implement
 
     private ColumnFamily getColumnFamily(QueryFilter filter, int gcBefore)
     {
-        assert columnFamily.equals(filter.getColumnFamilyName());
+        assert columnFamily.equals(filter.getColumnFamilyName()) : 
filter.getColumnFamilyName();
 
         long start = System.nanoTime();
         try
@@ -1014,7 +1014,7 @@ public class ColumnFamilyStore implement
                 }
             }
 
-            Comparator<IColumn> comparator = 
QueryFilter.getColumnComparator(getComparator());
+            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:

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/RowIteratorFactory.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/RowIteratorFactory.java?rev=992710&r1=992709&r2=992710&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/RowIteratorFactory.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/RowIteratorFactory.java 
Sun Sep  5 03:30:55 2010
@@ -125,7 +125,7 @@ public class RowIteratorFactory
 
             protected Row getReduced()
             {
-                Comparator<IColumn> colComparator = 
QueryFilter.getColumnComparator(comparator);
+                Comparator<IColumn> colComparator = 
filter.filter.getColumnComparator(comparator);
                 Iterator<IColumn> colCollated = 
IteratorUtils.collatedIterator(colComparator, colIters);
 
                 ColumnFamily returnCF = null;

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java?rev=992710&r1=992709&r2=992710&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/filter/QueryFilter.java 
Sun Sep  5 03:30:55 2010
@@ -84,7 +84,8 @@ public class QueryFilter
         return superFilter.getSSTableColumnIterator(sstable.metadata, file, 
key);
     }
 
-    public static Comparator<IColumn> getColumnComparator(final AbstractType 
comparator)
+    // here so it can be used by SQF and NQF.  non-package callers should call 
IFilter.getColumnComparator
+    static Comparator<IColumn> getColumnComparator(final Comparator<byte[]> 
comparator)
     {
         return new Comparator<IColumn>()
         {

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java?rev=992710&r1=992709&r2=992710&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/TableTest.java Sun Sep  5 
03:30:55 2010
@@ -18,10 +18,12 @@
 
 package org.apache.cassandra.db;
 
+import java.nio.ByteBuffer;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.util.*;
 import java.io.IOException;
+import java.util.concurrent.ExecutionException;
 
 import org.apache.cassandra.config.DatabaseDescriptor;
 
@@ -224,6 +226,38 @@ public class TableTest extends CleanupHe
         reTest(table.getColumnFamilyStore("Standard1"), verify);
     }
 
+    @Test
+    public void testReversedWithFlushing() throws IOException, 
ExecutionException, InterruptedException
+    {
+        final Table table = Table.open("Keyspace1");
+        final ColumnFamilyStore cfs = 
table.getColumnFamilyStore("StandardLong1");
+        final DecoratedKey ROW = Util.dk("row4");
+
+        for (int i = 0; i < 10; i++)
+        {
+            RowMutation rm = new RowMutation("Keyspace1", ROW.key);
+            ColumnFamily cf = ColumnFamily.create("Keyspace1", 
"StandardLong1");
+            cf.addColumn(new Column(FBUtilities.toByteArray((long)i), 
ArrayUtils.EMPTY_BYTE_ARRAY, new TimestampClock(0)));
+            rm.add(cf);
+            rm.apply();
+        }
+
+        cfs.forceBlockingFlush();
+
+        for (int i = 10; i < 20; i++)
+        {
+            RowMutation rm = new RowMutation("Keyspace1", ROW.key);
+            ColumnFamily cf = ColumnFamily.create("Keyspace1", 
"StandardLong1");
+            cf.addColumn(new Column(FBUtilities.toByteArray((long)i), 
ArrayUtils.EMPTY_BYTE_ARRAY, new TimestampClock(0)));
+            rm.add(cf);
+            rm.apply();
+
+            cf = cfs.getColumnFamily(ROW, new QueryPath("StandardLong1"), 
ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, 1);
+            assertEquals(1, cf.getColumnNames().size());
+            assertEquals(i, 
ByteBuffer.wrap(cf.getColumnNames().iterator().next()).getLong());
+        }
+    }
+
     private void validateGetSliceNoMatch(Table table) throws IOException
     {
         ColumnFamilyStore cfStore = table.getColumnFamilyStore("Standard2");


Reply via email to