You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2018/09/28 10:56:40 UTC
[3/6] cassandra git commit: Avoid calling iter.next() in a loop when
notifying indexers about range tombstones
Avoid calling iter.next() in a loop when notifying indexers about range tombstones
Patch by marcuse; reviewed by Alex Petrov and Sam Tunnicliffe for CASSANDRA-14794
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/30d28358
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/30d28358
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/30d28358
Branch: refs/heads/trunk
Commit: 30d2835809e119173b1124b3eecb134e3a8c19b6
Parents: d496dca
Author: Marcus Eriksson <ma...@apache.org>
Authored: Thu Sep 27 11:23:03 2018 +0200
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Fri Sep 28 12:52:20 2018 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/index/SecondaryIndexManager.java | 5 ++-
.../apache/cassandra/index/CustomIndexTest.java | 32 ++++++++++++++++++++
3 files changed, 37 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/30d28358/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 2c2f4f5..70b2996 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.0.18
+ * Avoid calling iter.next() in a loop when notifying indexers about range tombstones (CASSANDRA-14794)
* Fix purging semi-expired RT boundaries in reversed iterators (CASSANDRA-14672)
* DESC order reads can fail to return the last Unfiltered in the partition (CASSANDRA-14766)
* Fix corrupted collection deletions for dropped columns in 3.0 <-> 2.{1,2} messages (CASSANDRA-14568)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/30d28358/src/java/org/apache/cassandra/index/SecondaryIndexManager.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/index/SecondaryIndexManager.java b/src/java/org/apache/cassandra/index/SecondaryIndexManager.java
index 5976ddf..c5ecd25 100644
--- a/src/java/org/apache/cassandra/index/SecondaryIndexManager.java
+++ b/src/java/org/apache/cassandra/index/SecondaryIndexManager.java
@@ -596,7 +596,10 @@ public class SecondaryIndexManager implements IndexRegistry
{
Iterator<RangeTombstone> iter = deletionInfo.rangeIterator(false);
while (iter.hasNext())
- indexers.forEach(indexer -> indexer.rangeTombstone(iter.next()));
+ {
+ RangeTombstone rt = iter.next();
+ indexers.forEach(indexer -> indexer.rangeTombstone(rt));
+ }
}
indexers.forEach(Index.Indexer::finish);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/30d28358/test/unit/org/apache/cassandra/index/CustomIndexTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/index/CustomIndexTest.java b/test/unit/org/apache/cassandra/index/CustomIndexTest.java
index 81e1745..66e9fe5 100644
--- a/test/unit/org/apache/cassandra/index/CustomIndexTest.java
+++ b/test/unit/org/apache/cassandra/index/CustomIndexTest.java
@@ -28,6 +28,7 @@ import java.util.stream.Collectors;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Sets;
import org.junit.Test;
import com.datastax.driver.core.exceptions.QueryValidationException;
@@ -792,6 +793,37 @@ public class CustomIndexTest extends CQLTester
assertEquals(1, index.finishCalls);
}
+ @Test
+ public void rangeTombstoneTest() throws Throwable
+ {
+ createTable("CREATE TABLE %s(k int, c int, v int, v2 int, PRIMARY KEY(k,c))");
+ ColumnFamilyStore cfs = getCurrentColumnFamilyStore();
+ SecondaryIndexManager indexManager = cfs.indexManager;
+
+ // Insert a single range tombstone
+ execute("DELETE FROM %s WHERE k=1 and c > 2");
+ cfs.forceBlockingFlush();
+
+ // Create the index, which won't automatically start building
+ String indexName = "range_tombstone_idx";
+ createIndex(String.format("CREATE CUSTOM INDEX %s ON %%s(v) USING '%s'",
+ indexName, StubIndex.class.getName()));
+ String indexName2 = "range_tombstone_idx2";
+ createIndex(String.format("CREATE CUSTOM INDEX %s ON %%s(v2) USING '%s'",
+ indexName2, StubIndex.class.getName()));
+
+ StubIndex index = (StubIndex) indexManager.getIndexByName(indexName);
+ StubIndex index2 = (StubIndex) indexManager.getIndexByName(indexName2);
+
+ // Index the partition
+ DecoratedKey targetKey = getCurrentColumnFamilyStore().decorateKey(ByteBufferUtil.bytes(1));
+ indexManager.indexPartition(targetKey, Sets.newHashSet(index, index2), 1);
+
+ // and both indexes should have the same range tombstone
+ assertEquals(index.rangeTombstones, index2.rangeTombstones);
+ }
+
+
// Used for index creation above
public static class BrokenCustom2I extends StubIndex
{
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org