You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2020/03/19 19:51:49 UTC
[cassandra] 01/02: Fixed empty check in TrieMemIndex due to
potential state inconsistency in ConcurrentSkipListMap
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 731dfda99249c9b64fca5fa258c6078bfbe040ac
Author: Gianluca Righetto <gi...@menttis.com>
AuthorDate: Wed Mar 18 15:42:44 2020 -0300
Fixed empty check in TrieMemIndex due to potential state inconsistency in ConcurrentSkipListMap
Patch by Gianluca Righetto, reviewed by Ekaterina Dimitrova and Zhao Yang for CASSANDRA-15526
---
CHANGES.txt | 1 +
.../org/apache/cassandra/index/sasi/memory/KeyRangeIterator.java | 4 ++--
.../org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java | 9 ++++++---
.../org/apache/cassandra/index/sasi/memory/TrieMemIndex.java | 5 +++--
4 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 508ae19..8c8e74b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
4.0-alpha4
+ * Fixed empty check in TrieMemIndex due to potential state inconsistency in ConcurrentSkipListMap (CASSANDRA-15526)
* Add compaction allocation measurement test (CASSANDRA-15388)
* Added UnleveledSSTables global and table level metric (CASSANDRA-15620)
* Added Virtual Table exposing Cassandra relevant system properties (CASSANDRA-15616, CASSANDRA-15643)
diff --git a/src/java/org/apache/cassandra/index/sasi/memory/KeyRangeIterator.java b/src/java/org/apache/cassandra/index/sasi/memory/KeyRangeIterator.java
index 59d1122..0f681b7 100644
--- a/src/java/org/apache/cassandra/index/sasi/memory/KeyRangeIterator.java
+++ b/src/java/org/apache/cassandra/index/sasi/memory/KeyRangeIterator.java
@@ -37,9 +37,9 @@ public class KeyRangeIterator extends RangeIterator<Long, Token>
{
private final DKIterator iterator;
- public KeyRangeIterator(ConcurrentSkipListSet<DecoratedKey> keys)
+ public KeyRangeIterator(ConcurrentSkipListSet<DecoratedKey> keys, int size)
{
- super((Long) keys.first().getToken().getTokenValue(), (Long) keys.last().getToken().getTokenValue(), keys.size());
+ super((Long) keys.first().getToken().getTokenValue(), (Long) keys.last().getToken().getTokenValue(), size);
this.iterator = new DKIterator(keys.iterator());
}
diff --git a/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java b/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java
index 69b57d0..9e44344 100644
--- a/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java
+++ b/src/java/org/apache/cassandra/index/sasi/memory/SkipListMemIndex.java
@@ -88,9 +88,12 @@ public class SkipListMemIndex extends MemIndex
}
RangeUnionIterator.Builder<Long, Token> builder = RangeUnionIterator.builder();
- search.values().stream()
- .filter(keys -> !keys.isEmpty())
- .forEach(keys -> builder.add(new KeyRangeIterator(keys)));
+
+ for (ConcurrentSkipListSet<DecoratedKey> keys : search.values()) {
+ int size;
+ if ((size = keys.size()) > 0)
+ builder.add(new KeyRangeIterator(keys, size));
+ }
return builder.build();
}
diff --git a/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java b/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java
index 21cb7ce..cebd68f 100644
--- a/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java
+++ b/src/java/org/apache/cassandra/index/sasi/memory/TrieMemIndex.java
@@ -146,8 +146,9 @@ public class TrieMemIndex extends MemIndex
RangeUnionIterator.Builder<Long, Token> builder = RangeUnionIterator.builder();
for (ConcurrentSkipListSet<DecoratedKey> keys : search)
{
- if (!keys.isEmpty())
- builder.add(new KeyRangeIterator(keys));
+ int size;
+ if ((size = keys.size()) > 0)
+ builder.add(new KeyRangeIterator(keys, size));
}
return builder.build();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org