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]