This is an automated email from the ASF dual-hosted git repository. jmckenzie pushed a commit to branch cassandra-4.0 in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/cassandra-4.0 by this push: new 29c0ad80c9 Fix repair failure on assertion if two peers have overlapping mismatching ranges 29c0ad80c9 is described below commit 29c0ad80c919f02585f3ddfd7f9e0d2e80b62e2b Author: Josh McKenzie <jmcken...@apache.org> AuthorDate: Fri Sep 16 15:50:44 2022 -0400 Fix repair failure on assertion if two peers have overlapping mismatching ranges Patch by Marcus Eriksson; reviewed by Benedict Elliott Smith and Josh McKenzie for CASSANDRA-17900 Co-authored-by: Marcus Eriksson <marc...@apache.org> Co-authored-by: Josh McKenzie <jmcken...@apache.org> --- CHANGES.txt | 1 + .../org/apache/cassandra/repair/asymmetric/RangeMap.java | 10 ++++++---- .../apache/cassandra/repair/asymmetric/RangeMapTest.java | 14 ++++++++++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index c78d97d61c..22bebd6e88 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.0.7 + * Fix repair failure on assertion if two peers have overlapping mismatching ranges (CASSANDRA-17900) * Better handle null state in Gossip schema migration to avoid NPE (CASSANDRA-17864) * HintedHandoffAddRemoveNodesTest now accounts for the fact that StorageMetrics.totalHints is not updated synchronously w/ writes (CASSANDRA-16679) * Avoid getting hanging repairs due to repair message timeouts (CASSANDRA-17613) diff --git a/src/java/org/apache/cassandra/repair/asymmetric/RangeMap.java b/src/java/org/apache/cassandra/repair/asymmetric/RangeMap.java index f957b1b443..224b987af1 100644 --- a/src/java/org/apache/cassandra/repair/asymmetric/RangeMap.java +++ b/src/java/org/apache/cassandra/repair/asymmetric/RangeMap.java @@ -156,11 +156,13 @@ public class RangeMap<T> implements Map<Range<Token>, T> } protected Map.Entry<Range<Token>, T> computeNext() { - if ((currentIter == null || !currentIter.hasNext()) && iterators.hasNext()) + while (currentIter == null || !currentIter.hasNext()) + { + if (!iterators.hasNext()) + return endOfData(); currentIter = iterators.next(); - if (currentIter != null && currentIter.hasNext()) - return currentIter.next(); - return endOfData(); + } + return currentIter.next(); } } diff --git a/test/unit/org/apache/cassandra/repair/asymmetric/RangeMapTest.java b/test/unit/org/apache/cassandra/repair/asymmetric/RangeMapTest.java index 0805ea7756..a4327caa01 100644 --- a/test/unit/org/apache/cassandra/repair/asymmetric/RangeMapTest.java +++ b/test/unit/org/apache/cassandra/repair/asymmetric/RangeMapTest.java @@ -33,6 +33,7 @@ import org.apache.cassandra.dht.Token; import static junit.framework.TestCase.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; public class RangeMapTest { @@ -51,8 +52,8 @@ public class RangeMapTest for (Range<Token> range : randomRanges) rangeMap.put(range, i++); - long a = r.nextLong() % 100000; - long b = r.nextLong() % 100000; + long a = r.nextLong() % 1000000; + long b = r.nextLong() % 1000000; if (a == b) b++; Range<Token> intersectionRange = r(a, b); @@ -103,4 +104,13 @@ public class RangeMapTest RangeMap<Integer> rmap = new RangeMap<>(); assertFalse(rmap.intersectingEntryIterator(r(1, 10)).hasNext()); } + + @Test + public void testWrap() + { + RangeMap<Integer> rangeMap = new RangeMap<>(); + rangeMap.put(r(5, 10), 1); + rangeMap.removeIntersecting(r(100, 50)); + assertTrue(rangeMap.isEmpty()); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org