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");