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

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


The following commit(s) were added to refs/heads/master by this push:
     new 2af4bc2  [Bug] Java Version BitmapValue deserialized failed when only 
has 32-bit bitmap (#4884)
2af4bc2 is described below

commit 2af4bc294f06a00fc04374e61b294d0ab3f8a147
Author: wangbo <[email protected]>
AuthorDate: Mon Nov 16 21:54:07 2020 +0800

    [Bug] Java Version BitmapValue deserialized failed when only has 32-bit 
bitmap (#4884)
---
 .../apache/doris/load/loadv2/dpp/Roaring64Map.java  | 15 +++++++++++----
 .../doris/load/loadv2/dpp/BitmapValueTest.java      | 21 ++++++++++++++++++---
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git 
a/fe/spark-dpp/src/main/java/org/apache/doris/load/loadv2/dpp/Roaring64Map.java 
b/fe/spark-dpp/src/main/java/org/apache/doris/load/loadv2/dpp/Roaring64Map.java
index 56ad1a7..a606766 100644
--- 
a/fe/spark-dpp/src/main/java/org/apache/doris/load/loadv2/dpp/Roaring64Map.java
+++ 
b/fe/spark-dpp/src/main/java/org/apache/doris/load/loadv2/dpp/Roaring64Map.java
@@ -24,6 +24,7 @@ import org.roaringbitmap.BitmapDataProvider;
 import org.roaringbitmap.BitmapDataProviderSupplier;
 import org.roaringbitmap.IntConsumer;
 import org.roaringbitmap.IntIterator;
+import org.roaringbitmap.InvalidRoaringFormat;
 import org.roaringbitmap.RoaringBitmap;
 import org.roaringbitmap.RoaringBitmapSupplier;
 import org.roaringbitmap.Util;
@@ -1345,16 +1346,22 @@ public class Roaring64Map {
         this.clear();
         highToBitmap = new TreeMap<>();
 
-        long nbHighs = 1;
-        if (bitmapType == BitmapValue.BITMAP64) {
-            nbHighs = Codec.decodeVarint64(in);
+        if (bitmapType == BitmapValue.BITMAP32) {
+            RoaringBitmap provider = new RoaringBitmap();
+            provider.deserialize(in);
+            highToBitmap.put(0, provider);
+            return;
         }
 
+        if (bitmapType != BitmapValue.BITMAP64) {
+            throw new InvalidRoaringFormat("invalid bitmap type");
+        }
+
+        long nbHighs = Codec.decodeVarint64(in);
         for (int i = 0; i < nbHighs; i++) {
             int high = in.readInt();
             RoaringBitmap provider = new RoaringBitmap();
             provider.deserialize(in);
-
             highToBitmap.put(high, provider);
         }
 
diff --git 
a/fe/spark-dpp/src/test/java/org/apache/doris/load/loadv2/dpp/BitmapValueTest.java
 
b/fe/spark-dpp/src/test/java/org/apache/doris/load/loadv2/dpp/BitmapValueTest.java
index d9c71e8..e90e885 100644
--- 
a/fe/spark-dpp/src/test/java/org/apache/doris/load/loadv2/dpp/BitmapValueTest.java
+++ 
b/fe/spark-dpp/src/test/java/org/apache/doris/load/loadv2/dpp/BitmapValueTest.java
@@ -324,13 +324,11 @@ public class BitmapValueTest {
         
Assert.assertTrue(serializeSingleValueBitmapValue.equals(deserializeSingleValueBitmapValue));
 
         // bitmap
+        // case 1 : 32-bit bitmap
         BitmapValue serializeBitmapBitmapValue = new BitmapValue();
         for (int i = 0; i < 10; i++) {
             serializeBitmapBitmapValue.add(i);
         }
-        for (long i = Long.MAX_VALUE; i > Long.MAX_VALUE - 10; i--) {
-            serializeBitmapBitmapValue.add(i);
-        }
         ByteArrayOutputStream bitmapOutputStream = new ByteArrayOutputStream();
         DataOutput bitmapOutput = new DataOutputStream(bitmapOutputStream);
         serializeBitmapBitmapValue.serialize(bitmapOutput);
@@ -340,6 +338,23 @@ public class BitmapValueTest {
         deserializeBitmapBitmapValue.deserialize(bitmapInputStream);
 
         
Assert.assertTrue(serializeBitmapBitmapValue.equals(deserializeBitmapBitmapValue));
+
+
+        // bitmap
+        // case 2 : 64-bit bitmap
+        BitmapValue serializeBitmapBitmapValue64 = new BitmapValue();
+        for (long i = Long.MAX_VALUE; i > Long.MAX_VALUE - 10; i--) {
+            serializeBitmapBitmapValue64.add(i);
+        }
+        ByteArrayOutputStream bitmapOutputStream64 = new 
ByteArrayOutputStream();
+        DataOutput bitmapOutput64 = new DataOutputStream(bitmapOutputStream64);
+        serializeBitmapBitmapValue64.serialize(bitmapOutput64);
+
+        DataInputStream bitmapInputStream64 = new DataInputStream(new 
ByteArrayInputStream(bitmapOutputStream64.toByteArray()));
+        BitmapValue deserializeBitmapBitmapValue64 = new BitmapValue();
+        deserializeBitmapBitmapValue64.deserialize(bitmapInputStream64);
+
+        
Assert.assertTrue(serializeBitmapBitmapValue64.equals(deserializeBitmapBitmapValue64));
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to