[
https://issues.apache.org/jira/browse/KAFKA-6308?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jason Gustafson resolved KAFKA-6308.
------------------------------------
Resolution: Fixed
Fix Version/s: 1.0.1
Issue resolved by pull request 4293
[https://github.com/apache/kafka/pull/4293]
> Connect: Struct equals/hashCode method should use Arrays#deep* methods
> ----------------------------------------------------------------------
>
> Key: KAFKA-6308
> URL: https://issues.apache.org/jira/browse/KAFKA-6308
> Project: Kafka
> Issue Type: Bug
> Components: KafkaConnect
> Affects Versions: 1.0.0
> Reporter: Tobias Gies
> Labels: easyfix, newbie
> Fix For: 1.0.1
>
>
> At the moment, {{org.apache.kafka.connect.data.Struct#equals}} checks two
> things, after ensuring the incoming {{Object o}} is indeed of the correct
> type:
> * Whether the schemas of {{this}} and {{o}} are equal, via {{Objects#equals}}
> * Whether the values of {{this}} and {{o}} are qual, via {{Arrays#equals}}.
> The latter check is problematic. {{Arrays#equals}} is meant for
> one-dimensional arrays of any kind, and thus simply checks the {{equals}}
> methods of all corresponding elements of its parameters {{a1}} and {{a2}}.
> However, elements of the {{Struct#values}} array may themselves be arrays in
> a specific case, namely if a field has a {{BYTES}} Schema Type and the user's
> input for this field is of type {{byte[]}}.
> Given that, I would suggest to use {{Arrays#deepEquals}} to compare the
> {{values}} arrays of two {{Struct}} instances. With similar reasoning, I
> would also suggest to use {{Arrays#deepHashCode}} in the Struct's
> {{hashCode}} method.
> This would allow to properly compare and hash structs that get byte arrays
> passed in as field values instead of the recommended ByteBuffers. An
> alternative might be to automatically wrap byte arrays passed into any
> {{put}} method in a ByteBuffer.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)