github-advanced-security[bot] commented on code in PR #16863:
URL: https://github.com/apache/druid/pull/16863#discussion_r1708453083


##########
processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java:
##########
@@ -141,15 +119,101 @@
     return getObjectStrategy().fromByteBuffer(bb, numBytes);
   }
 
+  /**
+   * Deserializes a ByteBuffer and adds it to the ColumnBuilder.  This method 
allows for the ComplexMetricSerde
+   * to implement it's own versioning scheme to allow for changes of binary 
format in a forward-compatible manner.
+   *
+   * @param buffer  the buffer to deserialize
+   * @param builder ColumnBuilder to add the column to
+   * @param columnConfig ColumnConfiguration used during deserialization
+   */
+  public void deserializeColumn(
+      ByteBuffer buffer,
+      ColumnBuilder builder,
+      ColumnConfig columnConfig
+  )
+  {
+    deserializeColumn(buffer, builder);
+  }
+
+
+  /**
+   * {@link ComplexMetricSerde#deserializeColumn(ByteBuffer, ColumnBuilder, 
ColumnConfig)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Deprecated
+  public void deserializeColumn(ByteBuffer buffer, ColumnBuilder builder)
+  {
+    final int position = buffer.position();
+    final byte version = buffer.get();
+    if (version == CompressedComplexColumnSerializer.IS_COMPRESSED) {
+      CompressedComplexColumnSupplier supplier = 
CompressedComplexColumnSupplier.read(
+          buffer,
+          builder,
+          getTypeName(),
+          getObjectStrategy()
+      );
+      builder.setComplexColumnSupplier(supplier);
+      builder.setNullValueIndexSupplier(supplier.getNullValues());
+      builder.setHasNulls(!supplier.getNullValues().isEmpty());
+    } else {
+      buffer.position(position);
+      // default implementation to match default serializer implementation
+      builder.setComplexColumnSupplier(
+          new ComplexColumnPartSupplier(
+              getTypeName(),
+              GenericIndexed.read(buffer, getObjectStrategy(), 
builder.getFileMapper())
+          )
+      );
+    }
+  }
+
+  /**
+   * {@link ComplexMetricSerde#getSerializer(SegmentWriteOutMedium, String, 
IndexSpec)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Nullable
+  @Deprecated
+  public GenericColumnSerializer getSerializer(SegmentWriteOutMedium 
segmentWriteOutMedium, String column)

Review Comment:
   ## Useless parameter
   
   The parameter 'column' is never used.
   
   [Show more 
details](https://github.com/apache/druid/security/code-scanning/7688)



##########
processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java:
##########
@@ -141,15 +119,101 @@
     return getObjectStrategy().fromByteBuffer(bb, numBytes);
   }
 
+  /**
+   * Deserializes a ByteBuffer and adds it to the ColumnBuilder.  This method 
allows for the ComplexMetricSerde
+   * to implement it's own versioning scheme to allow for changes of binary 
format in a forward-compatible manner.
+   *
+   * @param buffer  the buffer to deserialize
+   * @param builder ColumnBuilder to add the column to
+   * @param columnConfig ColumnConfiguration used during deserialization
+   */
+  public void deserializeColumn(
+      ByteBuffer buffer,
+      ColumnBuilder builder,
+      ColumnConfig columnConfig
+  )
+  {
+    deserializeColumn(buffer, builder);
+  }
+
+
+  /**
+   * {@link ComplexMetricSerde#deserializeColumn(ByteBuffer, ColumnBuilder, 
ColumnConfig)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Deprecated
+  public void deserializeColumn(ByteBuffer buffer, ColumnBuilder builder)
+  {
+    final int position = buffer.position();
+    final byte version = buffer.get();
+    if (version == CompressedComplexColumnSerializer.IS_COMPRESSED) {
+      CompressedComplexColumnSupplier supplier = 
CompressedComplexColumnSupplier.read(
+          buffer,
+          builder,
+          getTypeName(),
+          getObjectStrategy()
+      );
+      builder.setComplexColumnSupplier(supplier);
+      builder.setNullValueIndexSupplier(supplier.getNullValues());
+      builder.setHasNulls(!supplier.getNullValues().isEmpty());
+    } else {
+      buffer.position(position);
+      // default implementation to match default serializer implementation
+      builder.setComplexColumnSupplier(
+          new ComplexColumnPartSupplier(
+              getTypeName(),
+              GenericIndexed.read(buffer, getObjectStrategy(), 
builder.getFileMapper())
+          )
+      );
+    }
+  }
+
+  /**
+   * {@link ComplexMetricSerde#getSerializer(SegmentWriteOutMedium, String, 
IndexSpec)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Nullable
+  @Deprecated
+  public GenericColumnSerializer getSerializer(SegmentWriteOutMedium 
segmentWriteOutMedium, String column)

Review Comment:
   ## Useless parameter
   
   The parameter 'segmentWriteOutMedium' is never used.
   
   [Show more 
details](https://github.com/apache/druid/security/code-scanning/7687)



##########
processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java:
##########
@@ -141,15 +119,101 @@
     return getObjectStrategy().fromByteBuffer(bb, numBytes);
   }
 
+  /**
+   * Deserializes a ByteBuffer and adds it to the ColumnBuilder.  This method 
allows for the ComplexMetricSerde
+   * to implement it's own versioning scheme to allow for changes of binary 
format in a forward-compatible manner.
+   *
+   * @param buffer  the buffer to deserialize
+   * @param builder ColumnBuilder to add the column to
+   * @param columnConfig ColumnConfiguration used during deserialization
+   */
+  public void deserializeColumn(
+      ByteBuffer buffer,
+      ColumnBuilder builder,
+      ColumnConfig columnConfig
+  )
+  {
+    deserializeColumn(buffer, builder);
+  }
+
+
+  /**
+   * {@link ComplexMetricSerde#deserializeColumn(ByteBuffer, ColumnBuilder, 
ColumnConfig)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Deprecated
+  public void deserializeColumn(ByteBuffer buffer, ColumnBuilder builder)
+  {
+    final int position = buffer.position();
+    final byte version = buffer.get();
+    if (version == CompressedComplexColumnSerializer.IS_COMPRESSED) {
+      CompressedComplexColumnSupplier supplier = 
CompressedComplexColumnSupplier.read(
+          buffer,
+          builder,
+          getTypeName(),
+          getObjectStrategy()
+      );
+      builder.setComplexColumnSupplier(supplier);
+      builder.setNullValueIndexSupplier(supplier.getNullValues());
+      builder.setHasNulls(!supplier.getNullValues().isEmpty());
+    } else {
+      buffer.position(position);
+      // default implementation to match default serializer implementation
+      builder.setComplexColumnSupplier(
+          new ComplexColumnPartSupplier(
+              getTypeName(),
+              GenericIndexed.read(buffer, getObjectStrategy(), 
builder.getFileMapper())
+          )
+      );
+    }
+  }
+
+  /**
+   * {@link ComplexMetricSerde#getSerializer(SegmentWriteOutMedium, String, 
IndexSpec)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Nullable
+  @Deprecated
+  public GenericColumnSerializer getSerializer(SegmentWriteOutMedium 
segmentWriteOutMedium, String column)
+  {
+    // default generic indexed based complex column that uses object strategy
+    return null;
+  }
+
   /**
    * This method provides the ability for a ComplexMetricSerde to control its 
own serialization.
    * For large column (i.e columns greater than {@link Integer#MAX_VALUE}) use
    * {@link LargeColumnSupportedComplexColumnSerializer}
    *
    * @return an instance of GenericColumnSerializer used for serialization.
    */
-  public GenericColumnSerializer getSerializer(SegmentWriteOutMedium 
segmentWriteOutMedium, String column)
+  public GenericColumnSerializer getSerializer(
+      SegmentWriteOutMedium segmentWriteOutMedium,
+      String column,
+      IndexSpec indexSpec
+  )
   {
-    return ComplexColumnSerializer.create(segmentWriteOutMedium, column, 
this.getObjectStrategy());
+    // backwards compatibility
+    final GenericColumnSerializer serializer = 
getSerializer(segmentWriteOutMedium, column);

Review Comment:
   ## Deprecated method or constructor invocation
   
   Invoking [ComplexMetricSerde.getSerializer](1) should be avoided because it 
has been deprecated.
   
   [Show more 
details](https://github.com/apache/druid/security/code-scanning/7690)



##########
processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java:
##########
@@ -141,15 +119,101 @@
     return getObjectStrategy().fromByteBuffer(bb, numBytes);
   }
 
+  /**
+   * Deserializes a ByteBuffer and adds it to the ColumnBuilder.  This method 
allows for the ComplexMetricSerde
+   * to implement it's own versioning scheme to allow for changes of binary 
format in a forward-compatible manner.
+   *
+   * @param buffer  the buffer to deserialize
+   * @param builder ColumnBuilder to add the column to
+   * @param columnConfig ColumnConfiguration used during deserialization
+   */
+  public void deserializeColumn(
+      ByteBuffer buffer,
+      ColumnBuilder builder,
+      ColumnConfig columnConfig
+  )
+  {
+    deserializeColumn(buffer, builder);
+  }
+
+
+  /**
+   * {@link ComplexMetricSerde#deserializeColumn(ByteBuffer, ColumnBuilder, 
ColumnConfig)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Deprecated
+  public void deserializeColumn(ByteBuffer buffer, ColumnBuilder builder)
+  {
+    final int position = buffer.position();
+    final byte version = buffer.get();
+    if (version == CompressedComplexColumnSerializer.IS_COMPRESSED) {
+      CompressedComplexColumnSupplier supplier = 
CompressedComplexColumnSupplier.read(
+          buffer,
+          builder,
+          getTypeName(),
+          getObjectStrategy()
+      );
+      builder.setComplexColumnSupplier(supplier);
+      builder.setNullValueIndexSupplier(supplier.getNullValues());
+      builder.setHasNulls(!supplier.getNullValues().isEmpty());
+    } else {
+      buffer.position(position);
+      // default implementation to match default serializer implementation
+      builder.setComplexColumnSupplier(
+          new ComplexColumnPartSupplier(
+              getTypeName(),
+              GenericIndexed.read(buffer, getObjectStrategy(), 
builder.getFileMapper())
+          )
+      );
+    }
+  }
+
+  /**
+   * {@link ComplexMetricSerde#getSerializer(SegmentWriteOutMedium, String, 
IndexSpec)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Nullable
+  @Deprecated
+  public GenericColumnSerializer getSerializer(SegmentWriteOutMedium 
segmentWriteOutMedium, String column)
+  {
+    // default generic indexed based complex column that uses object strategy
+    return null;
+  }
+
   /**
    * This method provides the ability for a ComplexMetricSerde to control its 
own serialization.
    * For large column (i.e columns greater than {@link Integer#MAX_VALUE}) use
    * {@link LargeColumnSupportedComplexColumnSerializer}
    *
    * @return an instance of GenericColumnSerializer used for serialization.
    */
-  public GenericColumnSerializer getSerializer(SegmentWriteOutMedium 
segmentWriteOutMedium, String column)
+  public GenericColumnSerializer getSerializer(
+      SegmentWriteOutMedium segmentWriteOutMedium,
+      String column,
+      IndexSpec indexSpec
+  )
   {
-    return ComplexColumnSerializer.create(segmentWriteOutMedium, column, 
this.getObjectStrategy());
+    // backwards compatibility
+    final GenericColumnSerializer serializer = 
getSerializer(segmentWriteOutMedium, column);
+    if (serializer != null) {
+      return serializer;
+    }
+
+    // default implementation
+    CompressionStrategy compressionStrategy = 
indexSpec.getComplexMetricCompression();
+    if (compressionStrategy == null || CompressionStrategy.NONE == 
compressionStrategy || CompressionStrategy.UNCOMPRESSED == compressionStrategy) 
{
+      return LargeColumnSupportedComplexColumnSerializer.create(
+          segmentWriteOutMedium,
+          column,
+          getObjectStrategy()
+      );
+    } else {
+      return CompressedComplexColumnSerializer.create(
+          segmentWriteOutMedium,
+          column,
+          indexSpec,
+          getObjectStrategy()

Review Comment:
   ## Deprecated method or constructor invocation
   
   Invoking [ComplexMetricSerde.getObjectStrategy](1) should be avoided because 
it has been deprecated.
   
   [Show more 
details](https://github.com/apache/druid/security/code-scanning/7692)



##########
processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java:
##########
@@ -141,15 +119,101 @@
     return getObjectStrategy().fromByteBuffer(bb, numBytes);
   }
 
+  /**
+   * Deserializes a ByteBuffer and adds it to the ColumnBuilder.  This method 
allows for the ComplexMetricSerde
+   * to implement it's own versioning scheme to allow for changes of binary 
format in a forward-compatible manner.
+   *
+   * @param buffer  the buffer to deserialize
+   * @param builder ColumnBuilder to add the column to
+   * @param columnConfig ColumnConfiguration used during deserialization
+   */
+  public void deserializeColumn(
+      ByteBuffer buffer,
+      ColumnBuilder builder,
+      ColumnConfig columnConfig
+  )
+  {
+    deserializeColumn(buffer, builder);

Review Comment:
   ## Deprecated method or constructor invocation
   
   Invoking [ComplexMetricSerde.deserializeColumn](1) should be avoided because 
it has been deprecated.
   
   [Show more 
details](https://github.com/apache/druid/security/code-scanning/4596)



##########
processing/src/main/java/org/apache/druid/segment/serde/ComplexMetricSerde.java:
##########
@@ -141,15 +119,101 @@
     return getObjectStrategy().fromByteBuffer(bb, numBytes);
   }
 
+  /**
+   * Deserializes a ByteBuffer and adds it to the ColumnBuilder.  This method 
allows for the ComplexMetricSerde
+   * to implement it's own versioning scheme to allow for changes of binary 
format in a forward-compatible manner.
+   *
+   * @param buffer  the buffer to deserialize
+   * @param builder ColumnBuilder to add the column to
+   * @param columnConfig ColumnConfiguration used during deserialization
+   */
+  public void deserializeColumn(
+      ByteBuffer buffer,
+      ColumnBuilder builder,
+      ColumnConfig columnConfig
+  )
+  {
+    deserializeColumn(buffer, builder);
+  }
+
+
+  /**
+   * {@link ComplexMetricSerde#deserializeColumn(ByteBuffer, ColumnBuilder, 
ColumnConfig)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Deprecated
+  public void deserializeColumn(ByteBuffer buffer, ColumnBuilder builder)
+  {
+    final int position = buffer.position();
+    final byte version = buffer.get();
+    if (version == CompressedComplexColumnSerializer.IS_COMPRESSED) {
+      CompressedComplexColumnSupplier supplier = 
CompressedComplexColumnSupplier.read(
+          buffer,
+          builder,
+          getTypeName(),
+          getObjectStrategy()
+      );
+      builder.setComplexColumnSupplier(supplier);
+      builder.setNullValueIndexSupplier(supplier.getNullValues());
+      builder.setHasNulls(!supplier.getNullValues().isEmpty());
+    } else {
+      buffer.position(position);
+      // default implementation to match default serializer implementation
+      builder.setComplexColumnSupplier(
+          new ComplexColumnPartSupplier(
+              getTypeName(),
+              GenericIndexed.read(buffer, getObjectStrategy(), 
builder.getFileMapper())
+          )
+      );
+    }
+  }
+
+  /**
+   * {@link ComplexMetricSerde#getSerializer(SegmentWriteOutMedium, String, 
IndexSpec)} should be used instead of this.
+   * This method is left for backward compatibility.
+   */
+  @Nullable
+  @Deprecated
+  public GenericColumnSerializer getSerializer(SegmentWriteOutMedium 
segmentWriteOutMedium, String column)
+  {
+    // default generic indexed based complex column that uses object strategy
+    return null;
+  }
+
   /**
    * This method provides the ability for a ComplexMetricSerde to control its 
own serialization.
    * For large column (i.e columns greater than {@link Integer#MAX_VALUE}) use
    * {@link LargeColumnSupportedComplexColumnSerializer}
    *
    * @return an instance of GenericColumnSerializer used for serialization.
    */
-  public GenericColumnSerializer getSerializer(SegmentWriteOutMedium 
segmentWriteOutMedium, String column)
+  public GenericColumnSerializer getSerializer(
+      SegmentWriteOutMedium segmentWriteOutMedium,
+      String column,
+      IndexSpec indexSpec
+  )
   {
-    return ComplexColumnSerializer.create(segmentWriteOutMedium, column, 
this.getObjectStrategy());
+    // backwards compatibility
+    final GenericColumnSerializer serializer = 
getSerializer(segmentWriteOutMedium, column);
+    if (serializer != null) {
+      return serializer;
+    }
+
+    // default implementation
+    CompressionStrategy compressionStrategy = 
indexSpec.getComplexMetricCompression();
+    if (compressionStrategy == null || CompressionStrategy.NONE == 
compressionStrategy || CompressionStrategy.UNCOMPRESSED == compressionStrategy) 
{
+      return LargeColumnSupportedComplexColumnSerializer.create(
+          segmentWriteOutMedium,
+          column,
+          getObjectStrategy()

Review Comment:
   ## Deprecated method or constructor invocation
   
   Invoking [ComplexMetricSerde.getObjectStrategy](1) should be avoided because 
it has been deprecated.
   
   [Show more 
details](https://github.com/apache/druid/security/code-scanning/7691)



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to