Skip to content

Commit

Permalink
Fix ConcurrentOpenLongPairRangeSet remove all range (apache#10656)
Browse files Browse the repository at this point in the history
(cherry picked from commit 2193412)
  • Loading branch information
315157973 authored and eolivelli committed May 21, 2021
1 parent 7dd6760 commit 66a7d55
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,7 @@ public void remove(Range<LongPair> range) {

// 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,30 @@ public void testDeleteCompareWithGuava() {
}
}

@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);
Expand Down

0 comments on commit 66a7d55

Please sign in to comment.