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

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


The following commit(s) were added to refs/heads/master by this push:
     new 31f988ec76 fix backwards compatibility for explicit null columns 
(#12585)
31f988ec76 is described below

commit 31f988ec76c802ae1cd487781554f33b7100ced8
Author: Clint Wylie <[email protected]>
AuthorDate: Wed Jun 1 12:39:48 2022 -0700

    fix backwards compatibility for explicit null columns (#12585)
---
 .../org/apache/druid/segment/IndexMergerV9.java    |  2 +-
 .../druid/segment/serde/NullColumnPartSerde.java   | 22 +++++++++++++++++++---
 .../segment/serde/NullColumnPartSerdeTest.java     |  5 +++--
 3 files changed, 23 insertions(+), 6 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/segment/IndexMergerV9.java 
b/processing/src/main/java/org/apache/druid/segment/IndexMergerV9.java
index c7d97b0871..daa4696371 100644
--- a/processing/src/main/java/org/apache/druid/segment/IndexMergerV9.java
+++ b/processing/src/main/java/org/apache/druid/segment/IndexMergerV9.java
@@ -337,7 +337,7 @@ public class IndexMergerV9 implements IndexMerger
           ColumnDescriptor columnDesc = ColumnDescriptor
               .builder()
               .setValueType(dimCapabilities.get(i).getType())
-              .addSerde(new NullColumnPartSerde(indexMergeResult.rowCount))
+              .addSerde(new NullColumnPartSerde(indexMergeResult.rowCount, 
indexSpec.getBitmapSerdeFactory()))
               .build();
           makeColumn(v9Smoosher, mergedDimensions.get(i), columnDesc);
         }
diff --git 
a/processing/src/main/java/org/apache/druid/segment/serde/NullColumnPartSerde.java
 
b/processing/src/main/java/org/apache/druid/segment/serde/NullColumnPartSerde.java
index 894527fae7..12e47eef73 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/serde/NullColumnPartSerde.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/serde/NullColumnPartSerde.java
@@ -26,6 +26,7 @@ import 
org.apache.druid.java.util.common.io.smoosh.FileSmoosher;
 import org.apache.druid.query.extraction.ExtractionFn;
 import org.apache.druid.segment.DimensionSelector;
 import org.apache.druid.segment.column.DictionaryEncodedColumn;
+import org.apache.druid.segment.data.BitmapSerdeFactory;
 import org.apache.druid.segment.data.IndexedInts;
 import org.apache.druid.segment.data.ReadableOffset;
 import org.apache.druid.segment.vector.MultiValueDimensionVectorSelector;
@@ -60,14 +61,18 @@ public class NullColumnPartSerde implements ColumnPartSerde
   };
 
   private final int numRows;
+  private final BitmapSerdeFactory bitmapSerdeFactory;
+
   private final NullDictionaryEncodedColumn nullDictionaryEncodedColumn;
 
   @JsonCreator
   public NullColumnPartSerde(
-      @JsonProperty("numRows") int numRows
+      @JsonProperty("numRows") int numRows,
+      @JsonProperty("bitmapSerdeFactory") BitmapSerdeFactory bitmapSerdeFactory
   )
   {
     this.numRows = numRows;
+    this.bitmapSerdeFactory = bitmapSerdeFactory;
     this.nullDictionaryEncodedColumn = new NullDictionaryEncodedColumn();
   }
 
@@ -77,6 +82,17 @@ public class NullColumnPartSerde implements ColumnPartSerde
     return numRows;
   }
 
+  /**
+   * This is no longer used for anything, but is required for backwards 
compatibility, so that segments with
+   * explicit null columns can be read with 0.23
+   */
+  @Deprecated
+  @JsonProperty
+  public BitmapSerdeFactory getBitmapSerdeFactory()
+  {
+    return bitmapSerdeFactory;
+  }
+
   @Nullable
   @Override
   public Serializer getSerializer()
@@ -108,13 +124,13 @@ public class NullColumnPartSerde implements 
ColumnPartSerde
       return false;
     }
     NullColumnPartSerde partSerde = (NullColumnPartSerde) o;
-    return numRows == partSerde.numRows;
+    return numRows == partSerde.numRows && Objects.equals(bitmapSerdeFactory, 
partSerde.bitmapSerdeFactory);
   }
 
   @Override
   public int hashCode()
   {
-    return Objects.hash(numRows);
+    return Objects.hash(numRows, bitmapSerdeFactory);
   }
 
   private final class NullDictionaryEncodedColumn implements 
DictionaryEncodedColumn<String>
diff --git 
a/processing/src/test/java/org/apache/druid/segment/serde/NullColumnPartSerdeTest.java
 
b/processing/src/test/java/org/apache/druid/segment/serde/NullColumnPartSerdeTest.java
index 72548978ea..d57dda4889 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/serde/NullColumnPartSerdeTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/serde/NullColumnPartSerdeTest.java
@@ -26,6 +26,7 @@ import org.apache.druid.segment.column.ColumnBuilder;
 import org.apache.druid.segment.column.ColumnCapabilities;
 import org.apache.druid.segment.column.ColumnConfig;
 import org.apache.druid.segment.column.ValueType;
+import org.apache.druid.segment.data.RoaringBitmapSerdeFactory;
 import org.apache.druid.testing.InitializedNullHandlingTest;
 import org.junit.Assert;
 import org.junit.Test;
@@ -40,7 +41,7 @@ public class NullColumnPartSerdeTest extends 
InitializedNullHandlingTest
   {
     final ObjectMapper mapper = new DefaultObjectMapper();
 
-    final NullColumnPartSerde partSerde = new NullColumnPartSerde(10);
+    final NullColumnPartSerde partSerde = new NullColumnPartSerde(10, new 
RoaringBitmapSerdeFactory(null));
     final String json = mapper.writeValueAsString(partSerde);
     Assert.assertEquals(partSerde, mapper.readValue(json, 
ColumnPartSerde.class));
   }
@@ -48,7 +49,7 @@ public class NullColumnPartSerdeTest extends 
InitializedNullHandlingTest
   @Test
   public void testDeserializer()
   {
-    final NullColumnPartSerde partSerde = new NullColumnPartSerde(10);
+    final NullColumnPartSerde partSerde = new NullColumnPartSerde(10, new 
RoaringBitmapSerdeFactory(null));
     final ColumnBuilder builder = new 
ColumnBuilder().setType(ValueType.DOUBLE);
     partSerde.getDeserializer().read(Mockito.mock(ByteBuffer.class), builder, 
Mockito.mock(ColumnConfig.class));
     final ColumnCapabilities columnCapabilities = 
builder.build().getCapabilities();


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

Reply via email to