Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
0.11.0, 0.12.0
-
None
Description
BytesRefArrayWritable's compareTo violates the compareTo contract from java.lang.Object. Specifically:
- 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.
Attachments
Attachments
Issue Links
- links to