You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by xe...@apache.org on 2012/03/28 00:20:32 UTC

git commit: fix KEYS index from skipping results patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-3996

Updated Branches:
  refs/heads/cassandra-1.1.0 5bd78edcc -> baf130094


fix KEYS index from skipping results
patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-3996


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/baf13009
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/baf13009
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/baf13009

Branch: refs/heads/cassandra-1.1.0
Commit: baf130094938ac03a91844cd5c3a70f54d5bcff3
Parents: 5bd78ed
Author: Pavel Yaskevich <xe...@apache.org>
Authored: Wed Mar 28 00:49:17 2012 +0300
Committer: Pavel Yaskevich <xe...@apache.org>
Committed: Wed Mar 28 01:16:57 2012 +0300

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 .../cassandra/db/index/keys/KeysSearcher.java      |    2 -
 .../apache/cassandra/db/ColumnFamilyStoreTest.java |   31 +++++++++++++++
 3 files changed, 32 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/baf13009/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index a1cd359..ae2b0f1 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,7 @@
 1.1-dev
  * Adds caching and bloomFilterFpChange to CQL options (CASSANDRA-4042)
  * Adds posibility to autoconfigure size of the KeyCache (CASSANDRA-4087)
+ * fix KEYS index from skipping results (CASSANDRA-3996)
 
 
 1.1-beta2

http://git-wip-us.apache.org/repos/asf/cassandra/blob/baf13009/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
index bd4be7e..686f810 100644
--- a/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
+++ b/src/java/org/apache/cassandra/db/index/keys/KeysSearcher.java
@@ -159,14 +159,12 @@ public class KeysSearcher extends SecondaryIndexSearcher
                         {
                             // skip the row we already saw w/ the last page of results
                             indexColumns.next();
-                            columnsRead--;
                             logger.debug("Skipping {}", baseCfs.metadata.getKeyValidator().getString(firstColumn.name()));
                         }
                         else if (range instanceof Range && indexColumns.hasNext() && firstColumn.name().equals(startKey))
                         {
                             // skip key excluded by range
                             indexColumns.next();
-                            columnsRead--;
                             logger.debug("Skipping first key as range excludes it");
                         }
                     }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/baf13009/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java b/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
index a0ee315..18dea98 100644
--- a/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
+++ b/test/unit/org/apache/cassandra/db/ColumnFamilyStoreTest.java
@@ -34,6 +34,7 @@ import org.apache.cassandra.db.columniterator.IdentityQueryFilter;
 import org.apache.cassandra.db.filter.*;
 import org.apache.cassandra.db.index.SecondaryIndex;
 import org.apache.cassandra.db.marshal.LexicalUUIDType;
+import org.apache.cassandra.db.marshal.LongType;
 import org.apache.cassandra.dht.*;
 import org.apache.cassandra.io.sstable.Component;
 import org.apache.cassandra.io.sstable.Descriptor;
@@ -899,6 +900,36 @@ public class ColumnFamilyStoreTest extends SchemaLoader
         assert rows.get(rows.size() - 1).key.equals(idk(6));
     }
 
+    @Test
+    public void testKeysSearcher() throws Exception
+    {
+        // Create secondary index and flush to disk
+        Table table = Table.open("Keyspace1");
+        ColumnFamilyStore store = table.getColumnFamilyStore("Indexed1");
+
+        store.truncate();
+
+        for (int i = 0; i < 10; i++)
+        {
+            ByteBuffer key = ByteBufferUtil.bytes(String.valueOf("k" + i));
+            RowMutation rm = new RowMutation("Keyspace1", key);
+
+            rm.add(new QueryPath("Indexed1", null, ByteBufferUtil.bytes("birthdate")),
+                   LongType.instance.decompose(1L),
+                   System.currentTimeMillis());
+
+            rm.apply();
+        }
+
+        store.forceBlockingFlush();
+
+        IndexExpression expr = new IndexExpression(ByteBufferUtil.bytes("birthdate"), IndexOperator.EQ, LongType.instance.decompose(1L));
+        // explicitly tell to the KeysSearcher to use column limiting for rowsPerQuery to trigger bogus columnsRead--; (CASSANDRA-3996)
+        List<Row> rows = store.search(Arrays.asList(expr), Util.range("", ""), 10, new IdentityQueryFilter(), true);
+
+        assert rows.size() == 10;
+    }
+
     private static String keys(List<Row> rows) throws Throwable
     {
         String k = "";