You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by gi...@apache.org on 2019/04/04 17:23:05 UTC

[incubator-druid] branch master updated: upgrade to RoaringBitmap 0.8.0 and serialise directly to ByteBuffer (#7408)

This is an automated email from the ASF dual-hosted git repository.

gian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-druid.git


The following commit(s) were added to refs/heads/master by this push:
     new d29a320  upgrade to RoaringBitmap 0.8.0 and serialise directly to ByteBuffer (#7408)
d29a320 is described below

commit d29a32062f4955226e37ca3fe62bdabc553c0590
Author: Richard Startin <ri...@openkappa.co.uk>
AuthorDate: Thu Apr 4 18:22:50 2019 +0100

    upgrade to RoaringBitmap 0.8.0 and serialise directly to ByteBuffer (#7408)
---
 pom.xml                                            |  2 +-
 .../collections/bitmap/RoaringBitmapFactory.java   | 12 ++--
 .../bitmap/WrappedImmutableRoaringBitmap.java      |  8 +--
 .../collections/bitmap/WrappedRoaringBitmap.java   | 66 +++-------------------
 4 files changed, 15 insertions(+), 73 deletions(-)

diff --git a/pom.xml b/pom.xml
index 1239bee..13c34e7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -706,7 +706,7 @@
             <dependency>
                 <groupId>org.roaringbitmap</groupId>
                 <artifactId>RoaringBitmap</artifactId>
-                <version>0.7.36</version>
+                <version>0.8.0</version>
             </dependency>
             <dependency>
                 <groupId>org.ow2.asm</groupId>
diff --git a/processing/src/main/java/org/apache/druid/collections/bitmap/RoaringBitmapFactory.java b/processing/src/main/java/org/apache/druid/collections/bitmap/RoaringBitmapFactory.java
index 7b1d2dc..90b848d 100644
--- a/processing/src/main/java/org/apache/druid/collections/bitmap/RoaringBitmapFactory.java
+++ b/processing/src/main/java/org/apache/druid/collections/bitmap/RoaringBitmapFactory.java
@@ -25,8 +25,6 @@ import org.roaringbitmap.RoaringBitmap;
 import org.roaringbitmap.buffer.BufferFastAggregation;
 import org.roaringbitmap.buffer.ImmutableRoaringBitmap;
 
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
 import java.nio.ByteBuffer;
 import java.util.Collection;
 import java.util.Iterator;
@@ -43,12 +41,10 @@ public class RoaringBitmapFactory implements BitmapFactory
   static {
     try {
       final RoaringBitmap roaringBitmap = new RoaringBitmap();
-      final ByteArrayOutputStream out = new ByteArrayOutputStream();
-      roaringBitmap.serialize(new DataOutputStream(out));
-      final byte[] bytes = out.toByteArray();
-
-      ByteBuffer buf = ByteBuffer.wrap(bytes);
-      EMPTY_IMMUTABLE_BITMAP = new ImmutableRoaringBitmap(buf);
+      final ByteBuffer buffer = ByteBuffer.allocate(roaringBitmap.serializedSizeInBytes());
+      roaringBitmap.serialize(buffer);
+      buffer.flip();
+      EMPTY_IMMUTABLE_BITMAP = new ImmutableRoaringBitmap(buffer);
     }
     catch (Exception e) {
       throw new RuntimeException(e);
diff --git a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableRoaringBitmap.java b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableRoaringBitmap.java
index 6091921..98c45b6 100644
--- a/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableRoaringBitmap.java
+++ b/processing/src/main/java/org/apache/druid/collections/bitmap/WrappedImmutableRoaringBitmap.java
@@ -22,8 +22,6 @@ package org.apache.druid.collections.bitmap;
 import org.roaringbitmap.IntIterator;
 import org.roaringbitmap.buffer.ImmutableRoaringBitmap;
 
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
 import java.nio.ByteBuffer;
 
 public class WrappedImmutableRoaringBitmap implements ImmutableBitmap
@@ -57,9 +55,9 @@ public class WrappedImmutableRoaringBitmap implements ImmutableBitmap
   public byte[] toBytes()
   {
     try {
-      final ByteArrayOutputStream out = new ByteArrayOutputStream();
-      bitmap.serialize(new DataOutputStream(out));
-      return out.toByteArray();
+      ByteBuffer buffer = ByteBuffer.allocate(bitmap.serializedSizeInBytes());
+      bitmap.serialize(buffer);
+      return buffer.array();
     }
     catch (Exception e) {
       throw new RuntimeException(e);
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 33f43e9..c3ab977 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
@@ -24,10 +24,6 @@ import org.roaringbitmap.RoaringBitmap;
 import org.roaringbitmap.RoaringBitmapWriter;
 import org.roaringbitmap.buffer.MutableRoaringBitmap;
 
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
 import java.nio.ByteBuffer;
 
 public class WrappedRoaringBitmap implements MutableBitmap
@@ -73,13 +69,13 @@ public class WrappedRoaringBitmap implements MutableBitmap
   public byte[] toBytes()
   {
     try {
-      final ByteArrayOutputStream out = new ByteArrayOutputStream();
       MutableRoaringBitmap bitmap = writer.get();
       if (compressRunOnSerialization) {
         bitmap.runOptimize();
       }
-      bitmap.serialize(new DataOutputStream(out));
-      return out.toByteArray();
+      ByteBuffer buffer = ByteBuffer.allocate(bitmap.serializedSizeInBytes());
+      bitmap.serialize(buffer);
+      return buffer.array();
     }
     catch (Exception e) {
       throw new RuntimeException(e);
@@ -125,59 +121,11 @@ public class WrappedRoaringBitmap implements MutableBitmap
 
   public void serialize(ByteBuffer buffer)
   {
-    try {
-      MutableRoaringBitmap bitmap = writer.get();
-      if (compressRunOnSerialization) {
-        bitmap.runOptimize();
-      }
-      bitmap.serialize(
-          new DataOutputStream(
-              new OutputStream()
-              {
-                ByteBuffer mBB;
-
-                OutputStream init(ByteBuffer mbb)
-                {
-                  mBB = mbb;
-                  return this;
-                }
-
-                @Override
-                public void close()
-                {
-                  // unnecessary
-                }
-
-                @Override
-                public void flush()
-                {
-                  // unnecessary
-                }
-
-                @Override
-                public void write(int b)
-                {
-                  mBB.put((byte) b);
-                }
-
-                @Override
-                public void write(byte[] b)
-                {
-                  mBB.put(b);
-                }
-
-                @Override
-                public void write(byte[] b, int off, int l)
-                {
-                  mBB.put(b, off, l);
-                }
-              }.init(buffer)
-          )
-      );
-    }
-    catch (IOException e) {
-      throw new RuntimeException(e); // impossible in theory
+    MutableRoaringBitmap bitmap = writer.get();
+    if (compressRunOnSerialization) {
+      bitmap.runOptimize();
     }
+    bitmap.serialize(buffer);
   }
 
   @Override


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org