You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2021/05/21 00:33:56 UTC
[pulsar] branch branch-2.7 updated: Fix
ConcurrentOpenLongPairRangeSet remove all range (#10656)
This is an automated email from the ASF dual-hosted git repository.
mmerli pushed a commit to branch branch-2.7
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-2.7 by this push:
new 2193412 Fix ConcurrentOpenLongPairRangeSet remove all range (#10656)
2193412 is described below
commit 21934124ef6fcc3b07ece45551ed17628197f38c
Author: feynmanlin <fe...@tencent.com>
AuthorDate: Fri May 21 08:32:16 2021 +0800
Fix ConcurrentOpenLongPairRangeSet remove all range (#10656)
---
.../ConcurrentOpenLongPairRangeSet.java | 2 +-
.../ConcurrentOpenLongPairRangeSetTest.java | 24 ++++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/ConcurrentOpenLongPairRangeSet.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/ConcurrentOpenLongPairRangeSet.java
index 0d14119..e12de1a 100644
--- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/ConcurrentOpenLongPairRangeSet.java
+++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/ConcurrentOpenLongPairRangeSet.java
@@ -344,7 +344,7 @@ public class ConcurrentOpenLongPairRangeSet<T extends Comparable<T>> implements
// remove all the keys between two endpoint keys
rangeBitSetMap.forEach((key, set) -> {
- if (lowerEndpoint.getKey() == upperEndpoint.getKey()) {
+ if (lowerEndpoint.getKey() == upperEndpoint.getKey() && key == upperEndpoint.getKey()) {
set.clear((int) lower, (int) upper + 1);
} else {
// eg: remove-range: [(3,5) - (5,5)] -> Delete all items from 3,6->3,N,4.*,5,0->5,5
diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/ConcurrentOpenLongPairRangeSetTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/ConcurrentOpenLongPairRangeSetTest.java
index 4adf14f..04493fe 100644
--- a/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/ConcurrentOpenLongPairRangeSetTest.java
+++ b/pulsar-common/src/test/java/org/apache/pulsar/common/util/collections/ConcurrentOpenLongPairRangeSetTest.java
@@ -170,6 +170,30 @@ public class ConcurrentOpenLongPairRangeSetTest {
}
@Test
+ public void testRemoveRangeInSameKey() {
+ ConcurrentOpenLongPairRangeSet<LongPair> set = new ConcurrentOpenLongPairRangeSet<>(consumer);
+ set.addOpenClosed(0, 1, 0, 50);
+ set.addOpenClosed(0, 97, 0, 99);
+ set.addOpenClosed(0, 99, 1, 5);
+ set.addOpenClosed(1, 9, 1, 15);
+ set.addOpenClosed(1, 19, 2, 10);
+ set.addOpenClosed(2, 24, 2, 28);
+ set.addOpenClosed(3, 11, 3, 20);
+ set.addOpenClosed(4, 11, 4, 20);
+ // range is [(0:1..0:50],(0:97..0:99],(1:-1..1:5],(1:9..1:15],(2:-1..2:10],(2:24..2:28],(3:11..3:20],(4:11..4:20]]
+ set.remove(Range.closed(new LongPair(0, 0), new LongPair(0, Integer.MAX_VALUE - 1)));
+ // after remove is [(1:-1..1:5],(1:9..1:15],(2:-1..2:10],(2:24..2:28],(3:11..3:20],(4:11..4:20]]
+ int count = 0;
+ List<Range<LongPair>> ranges = set.asRanges();
+ assertEquals(ranges.get(count++), Range.openClosed(new LongPair(1, -1), new LongPair(1, 5)));
+ assertEquals(ranges.get(count++), Range.openClosed(new LongPair(1, 9), new LongPair(1, 15)));
+ assertEquals(ranges.get(count++), Range.openClosed(new LongPair(2, -1), new LongPair(2, 10)));
+ assertEquals(ranges.get(count++), Range.openClosed(new LongPair(2, 24), new LongPair(2, 28)));
+ assertEquals(ranges.get(count++), Range.openClosed(new LongPair(3, 11), new LongPair(3, 20)));
+ assertEquals(ranges.get(count), Range.openClosed(new LongPair(4, 11), new LongPair(4, 20)));
+ }
+
+ @Test
public void testSpanWithGuava() {
ConcurrentOpenLongPairRangeSet<LongPair> set = new ConcurrentOpenLongPairRangeSet<>(consumer);
com.google.common.collect.RangeSet<LongPair> gSet = TreeRangeSet.create();