Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id D302D200D66 for ; Fri, 15 Dec 2017 00:32:04 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id D1D07160C26; Thu, 14 Dec 2017 23:32:04 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 24F7A160C16 for ; Fri, 15 Dec 2017 00:32:03 +0100 (CET) Received: (qmail 96308 invoked by uid 500); 14 Dec 2017 23:32:02 -0000 Mailing-List: contact dev-help@kafka.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@kafka.apache.org Delivered-To: mailing list dev@kafka.apache.org Received: (qmail 96296 invoked by uid 99); 14 Dec 2017 23:32:02 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd3-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 14 Dec 2017 23:32:02 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd3-us-west.apache.org (ASF Mail Server at spamd3-us-west.apache.org) with ESMTP id 401A61809F9 for ; Thu, 14 Dec 2017 23:32:02 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd3-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -99.202 X-Spam-Level: X-Spam-Status: No, score=-99.202 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd3-us-west.apache.org [10.40.0.10]) (amavisd-new, port 10024) with ESMTP id h_Hvu_x8B9gb for ; Thu, 14 Dec 2017 23:32:01 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id 242895FB5B for ; Thu, 14 Dec 2017 23:32:01 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id ACD03E09A5 for ; Thu, 14 Dec 2017 23:32:00 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id 677E9212FC for ; Thu, 14 Dec 2017 23:32:00 +0000 (UTC) Date: Thu, 14 Dec 2017 23:32:00 +0000 (UTC) From: "Jason Gustafson (JIRA)" To: dev@kafka.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Resolved] (KAFKA-6308) Connect: Struct equals/hashCode method should use Arrays#deep* methods MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Thu, 14 Dec 2017 23:32:05 -0000 [ 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)