You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2014/01/29 07:11:00 UTC

git commit: Fix ABSC reverse iterator's remove() method

Updated Branches:
  refs/heads/cassandra-1.2 2e95a4f78 -> d43f84bb2


Fix ABSC reverse iterator's remove() method

patch by Mikhail Stepura; reviewed by Aleksey Yeschenko for
CASSANDRA-6629


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

Branch: refs/heads/cassandra-1.2
Commit: d43f84bb219b51e9ac5edda04a6a9febf344d57c
Parents: 2e95a4f
Author: Mikhail Stepura <mi...@outlook.com>
Authored: Tue Jan 28 15:01:16 2014 -0800
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Wed Jan 29 00:08:22 2014 -0600

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../cassandra/db/ArrayBackedSortedColumns.java  |  7 ++++-
 .../db/ArrayBackedSortedColumnsTest.java        | 28 ++++++++++++++++++++
 3 files changed, 35 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/d43f84bb/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index c690150..ec546db 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -16,6 +16,7 @@
  * Improve error message when schema doesn't match loaded sstable (CASSANDRA-6262)
  * Add properties to adjust FD initial value and max interval (CASSANDRA-4375)
  * Fix preparing with batch and delete from collection (CASSANDRA-6607)
+ * Fix ABSC reverse iterator's remove() method (CASSANDRA-6629)
 
 
 1.2.13

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d43f84bb/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java b/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
index d9e93d6..662af62 100644
--- a/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
+++ b/src/java/org/apache/cassandra/db/ArrayBackedSortedColumns.java
@@ -388,6 +388,7 @@ public class ArrayBackedSortedColumns extends AbstractThreadUnsafeSortedColumns
             return new Iterator<IColumn>()
             {
                 int idx = size() - 1;
+                boolean shouldCallNext = true;
 
                 public boolean hasNext()
                 {
@@ -396,12 +397,16 @@ public class ArrayBackedSortedColumns extends AbstractThreadUnsafeSortedColumns
 
                 public IColumn next()
                 {
+                    shouldCallNext = false;
                     return columns.get(idx--);
                 }
 
                 public void remove()
                 {
-                    columns.remove(idx--);
+                    if (shouldCallNext)
+                        throw new IllegalStateException();
+                    columns.remove(idx + 1);
+                    shouldCallNext = true;
                 }
             };
         }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/d43f84bb/test/unit/org/apache/cassandra/db/ArrayBackedSortedColumnsTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/ArrayBackedSortedColumnsTest.java b/test/unit/org/apache/cassandra/db/ArrayBackedSortedColumnsTest.java
index 0ea4f71..00455d6 100644
--- a/test/unit/org/apache/cassandra/db/ArrayBackedSortedColumnsTest.java
+++ b/test/unit/org/apache/cassandra/db/ArrayBackedSortedColumnsTest.java
@@ -186,4 +186,32 @@ public class ArrayBackedSortedColumnsTest
             assert name == value : "Expected " + name + " but got " + value;
         }
     }
+
+    @Test
+    public void testRemove()
+    {
+        testRemoveInternal(false);
+        testRemoveInternal(true);
+    }
+
+    private void testRemoveInternal(boolean reversed)
+    {
+        ISortedColumns map = ArrayBackedSortedColumns.factory.create(BytesType.instance, reversed);
+        int[] values = new int[]{ 1, 2, 2, 3 };
+
+        for (int i = 0; i < values.length; ++i)
+            map.addColumn(new Column(ByteBufferUtil.bytes(values[reversed ? values.length - 1 - i : i])), HeapAllocator.instance);
+
+        Iterator<IColumn> iter = map.getReverseSortedColumns().iterator();
+        assertTrue(iter.hasNext());
+        iter.next();
+        iter.remove();
+        assertTrue(iter.hasNext());
+        iter.next();
+        iter.remove();
+        assertTrue(iter.hasNext());
+        iter.next();
+        iter.remove();
+        assertTrue(!iter.hasNext());
+    }
 }