[ 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)