Skip to content

Commit a25c6cd

Browse files
dao-junnikhil-ctds
authored andcommitted
[improve][broker] Optimize ConcurrentOpenLongPairRangeSet by RoaringBitmap (apache#22908)
(cherry picked from commit 5b1f653) (cherry picked from commit f99040d)
1 parent 3b9f5b4 commit a25c6cd

File tree

7 files changed

+455
-11
lines changed

7 files changed

+455
-11
lines changed

distribution/server/src/assemble/LICENSE.bin.txt

+1-2
Original file line numberDiff line numberDiff line change
@@ -505,8 +505,7 @@ The Apache Software License, Version 2.0
505505
* RxJava
506506
- io.reactivex.rxjava3-rxjava-3.0.1.jar
507507
* RoaringBitmap
508-
- org.roaringbitmap-RoaringBitmap-0.9.44.jar
509-
- org.roaringbitmap-shims-0.9.44.jar
508+
- org.roaringbitmap-RoaringBitmap-1.1.0.jar
510509

511510
BSD 3-clause "New" or "Revised" License
512511
* Google auth library

distribution/shell/src/assemble/LICENSE.bin.txt

+2
Original file line numberDiff line numberDiff line change
@@ -380,6 +380,8 @@ The Apache Software License, Version 2.0
380380
- simpleclient_tracer_common-0.16.0.jar
381381
- simpleclient_tracer_otel-0.16.0.jar
382382
- simpleclient_tracer_otel_agent-0.16.0.jar
383+
* RoaringBitmap
384+
- RoaringBitmap-1.1.0.jar
383385
* Log4J
384386
- log4j-api-2.18.0.jar
385387
- log4j-core-2.18.0.jar

pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ flexible messaging model and an intuitive client API.</description>
306306
<j2objc-annotations.version>1.3</j2objc-annotations.version>
307307
<lightproto-maven-plugin.version>0.4</lightproto-maven-plugin.version>
308308
<dependency-check-maven.version>9.1.0</dependency-check-maven.version>
309-
<roaringbitmap.version>0.9.44</roaringbitmap.version>
309+
<roaringbitmap.version>1.1.0</roaringbitmap.version>
310310
<extra-enforcer-rules.version>1.6.1</extra-enforcer-rules.version>
311311
<oshi.version>6.4.0</oshi.version>
312312

pulsar-common/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,11 @@
244244
<artifactId>awaitility</artifactId>
245245
<scope>test</scope>
246246
</dependency>
247+
248+
<dependency>
249+
<groupId>org.roaringbitmap</groupId>
250+
<artifactId>RoaringBitmap</artifactId>
251+
</dependency>
247252
</dependencies>
248253

249254
<build>

pulsar-common/src/main/java/org/apache/pulsar/common/util/collections/ConcurrentOpenLongPairRangeSet.java

+5-7
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.util.concurrent.ConcurrentSkipListMap;
3030
import java.util.concurrent.atomic.AtomicBoolean;
3131
import org.apache.commons.lang.mutable.MutableInt;
32+
import org.roaringbitmap.RoaringBitSet;
3233

3334
/**
3435
* A Concurrent set comprising zero or more ranges of type {@link LongPair}. This can be alternative of
@@ -44,7 +45,7 @@
4445
public class ConcurrentOpenLongPairRangeSet<T extends Comparable<T>> implements LongPairRangeSet<T> {
4546

4647
protected final NavigableMap<Long, BitSet> rangeBitSetMap = new ConcurrentSkipListMap<>();
47-
private boolean threadSafe = true;
48+
private final boolean threadSafe;
4849
private final int bitSetSize;
4950
private final LongPairConsumer<T> consumer;
5051

@@ -95,9 +96,7 @@ public void addOpenClosed(long lowerKey, long lowerValueOpen, long upperKey, lon
9596
// (2) set 0th-index to upper-index in upperRange.getKey()
9697
if (isValid(upperKey, upperValue)) {
9798
BitSet rangeBitSet = rangeBitSetMap.computeIfAbsent(upperKey, (key) -> createNewBitSet());
98-
if (rangeBitSet != null) {
99-
rangeBitSet.set(0, (int) upperValue + 1);
100-
}
99+
rangeBitSet.set(0, (int) upperValue + 1);
101100
}
102101
// No-op if values are not valid eg: if lower == LongPair.earliest or upper == LongPair.latest then nothing
103102
// to set
@@ -414,7 +413,6 @@ private int getSafeEntry(long value) {
414413
}
415414

416415
private BitSet createNewBitSet() {
417-
return this.threadSafe ? new ConcurrentBitSet(bitSetSize) : new BitSet(bitSetSize);
416+
return this.threadSafe ? new ConcurrentRoaringBitSet() : new RoaringBitSet();
418417
}
419-
420-
}
418+
}

0 commit comments

Comments
 (0)