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();