diff --git a/pom.xml b/pom.xml index 03bf81453c2..5a9f2c70d78 100644 --- a/pom.xml +++ b/pom.xml @@ -681,7 +681,7 @@ org.roaringbitmap RoaringBitmap - 0.7.30 + 0.7.36 org.ow2.asm @@ -987,7 +987,7 @@ org.codehaus.mojo animal-sniffer-maven-plugin - 1.15 + 1.17 check-java-api diff --git a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedRoaringBitmap.java b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedRoaringBitmap.java index bf20138c718..8690af38bb8 100644 --- a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedRoaringBitmap.java +++ b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedRoaringBitmap.java @@ -22,6 +22,7 @@ package org.apache.druid.collections.bitmap; import com.google.common.base.Throwables; import org.roaringbitmap.IntIterator; import org.roaringbitmap.RoaringBitmap; +import org.roaringbitmap.RoaringBitmapWriter; import org.roaringbitmap.buffer.MutableRoaringBitmap; import java.io.ByteArrayOutputStream; @@ -39,7 +40,7 @@ public class WrappedRoaringBitmap implements MutableBitmap /** * Underlying bitmap. */ - private MutableRoaringBitmap bitmap; + private RoaringBitmapWriter writer; /** * Creates a new WrappedRoaringBitmap wrapping an empty MutableRoaringBitmap @@ -56,17 +57,17 @@ public class WrappedRoaringBitmap implements MutableBitmap */ public WrappedRoaringBitmap(boolean compressRunOnSerialization) { - this.bitmap = new MutableRoaringBitmap(); + this.writer = RoaringBitmapWriter.bufferWriter().get(); this.compressRunOnSerialization = compressRunOnSerialization; } ImmutableBitmap toImmutableBitmap() { - MutableRoaringBitmap mrb = bitmap.clone(); + MutableRoaringBitmap bitmap = writer.get().clone(); if (compressRunOnSerialization) { - mrb.runOptimize(); + bitmap.runOptimize(); } - return new WrappedImmutableRoaringBitmap(mrb); + return new WrappedImmutableRoaringBitmap(bitmap.toImmutableRoaringBitmap()); } @Override @@ -74,6 +75,7 @@ public class WrappedRoaringBitmap implements MutableBitmap { try { final ByteArrayOutputStream out = new ByteArrayOutputStream(); + MutableRoaringBitmap bitmap = writer.get(); if (compressRunOnSerialization) { bitmap.runOptimize(); } @@ -88,21 +90,22 @@ public class WrappedRoaringBitmap implements MutableBitmap @Override public void clear() { - this.bitmap.clear(); + this.writer.reset(); } @Override public void or(MutableBitmap mutableBitmap) { WrappedRoaringBitmap other = (WrappedRoaringBitmap) mutableBitmap; - MutableRoaringBitmap unwrappedOtherBitmap = other.bitmap; - bitmap.or(unwrappedOtherBitmap); + MutableRoaringBitmap unwrappedOtherBitmap = other.writer.get(); + writer.get().or(unwrappedOtherBitmap); } @Override public int getSizeInBytes() { + MutableRoaringBitmap bitmap = writer.get(); if (compressRunOnSerialization) { bitmap.runOptimize(); } @@ -112,21 +115,22 @@ public class WrappedRoaringBitmap implements MutableBitmap @Override public void add(int entry) { - bitmap.add(entry); + writer.add(entry); } @Override public int size() { - return bitmap.getCardinality(); + return writer.get().getCardinality(); } public void serialize(ByteBuffer buffer) { - if (compressRunOnSerialization) { - bitmap.runOptimize(); - } try { + MutableRoaringBitmap bitmap = writer.get(); + if (compressRunOnSerialization) { + bitmap.runOptimize(); + } bitmap.serialize( new DataOutputStream( new OutputStream() @@ -180,38 +184,38 @@ public class WrappedRoaringBitmap implements MutableBitmap @Override public String toString() { - return getClass().getSimpleName() + bitmap; + return getClass().getSimpleName() + writer.getUnderlying(); } @Override public void remove(int entry) { - bitmap.remove(entry); + writer.get().remove(entry); } @Override public IntIterator iterator() { - return bitmap.getIntIterator(); + return writer.get().getIntIterator(); } @Override public boolean isEmpty() { - return bitmap.isEmpty(); + return writer.get().isEmpty(); } @Override public ImmutableBitmap intersection(ImmutableBitmap otherBitmap) { WrappedRoaringBitmap other = (WrappedRoaringBitmap) otherBitmap; - MutableRoaringBitmap unwrappedOtherBitmap = other.bitmap; - return new WrappedImmutableRoaringBitmap(MutableRoaringBitmap.and(bitmap, unwrappedOtherBitmap)); + MutableRoaringBitmap unwrappedOtherBitmap = other.writer.get(); + return new WrappedImmutableRoaringBitmap(MutableRoaringBitmap.and(writer.get(), unwrappedOtherBitmap)); } @Override public boolean get(int value) { - return bitmap.contains(value); + return writer.get().contains(value); } }