hive-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Xuefu Zhang (JIRA)" <>
Subject [jira] [Updated] (HIVE-5839) BytesRefArrayWritable compareTo violates contract
Date Mon, 18 Nov 2013 20:17:22 GMT


Xuefu Zhang updated HIVE-5839:

    Affects Version/s: 0.12.0
               Status: Patch Available  (was: Open)

The first patch adjusts the behavior, with new tests pending. However, I'd like to see what
the change impacts without knowing the rationale behind the original implementation. Let's
see how the test goes.

> BytesRefArrayWritable compareTo violates contract
> -------------------------------------------------
>                 Key: HIVE-5839
>                 URL:
>             Project: Hive
>          Issue Type: Bug
>          Components: Serializers/Deserializers
>    Affects Versions: 0.12.0, 0.11.0
>            Reporter: Ian Robertson
>            Assignee: Xuefu Zhang
>         Attachments: HIVE-5839.patch
> BytesRefArrayWritable's compareTo violates the compareTo contract from java.lang.Object.
> * The implementor must ensure sgn(x.compareTo( y )) == -sgn(y.compareTo( x )) for all
x and y.
> The compareTo implementation on BytesRefArrayWritable does a proper comparison of the
sizes of the two instances. However, if the sizes are the same, it proceeds to do a check
if both array's have the same constant. If not, it returns 1. This means that if x and y are
two BytesRefArrayWritable instances with the same size, but different contents, then x.compareTo(
y ) == 1 and y.compareTo( x ) == 1.
> Additionally, the comparison of contents is order agnostic. This seems wrong, since order
of entries should matter. It is also very inefficient, running at O(n^2), where n is the number
of entries.

This message was sent by Atlassian JIRA

View raw message