[ 
https://issues.apache.org/jira/browse/AVRO-667?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Doug Cutting updated AVRO-667:
------------------------------

    Attachment: AVRO-667.patch

I just realized that this could have a big performance impact on 
GenericData#compare() and hashCode().  The former is called in the inner loop 
of MapReduce sorts and is thus performance critical.  In this context, both 
instances will be Utf8.  Also, the correct ordering is by codepoint, which is 
the same as Utf8, while String's ordering may differ for surrogate pairs I 
believe.  So I'd rather convert Strings to Utf8 than vice versa, to better 
preserve both correctness and performance.  Here's a patch that does this.  All 
tests pass.

> GenericArray fails to compare with List.  SpecificRecord compare gets 
> ClassCastException
> ----------------------------------------------------------------------------------------
>
>                 Key: AVRO-667
>                 URL: https://issues.apache.org/jira/browse/AVRO-667
>             Project: Avro
>          Issue Type: Bug
>    Affects Versions: 1.4.0
>            Reporter: Scott Carey
>            Assignee: Scott Carey
>            Priority: Blocker
>             Fix For: 1.4.1
>
>         Attachments: AVRO-667.patch, AVRO-667.patch, AVRO-667.patch, 
> AVRO-667.patch
>
>
> AVRO-637 is incomplete.
> I am unable to convert my SpecificRecord project to 1.4.  It compiles, but 
> unit tests get runtime exceptions.
> compareTo in GenericData does not handle List vs GenericArray and I get class 
> cast exceptions.
> {noformat}
> java.lang.ClassCastException: java.util.ArrayList cannot be cast to 
> org.apache.avro.generic.GenericArray
>       at org.apache.avro.generic.GenericData.compare(GenericData.java:502)
>       at org.apache.avro.specific.SpecificData.compare(SpecificData.java:190)
>       at org.apache.avro.generic.GenericData.compare(GenericData.java:494)
>       at org.apache.avro.specific.SpecificData.compare(SpecificData.java:190)
>       at 
> org.apache.avro.specific.SpecificRecordBase.compareTo(SpecificRecordBase.java:45)
>       at 
> org.apache.avro.specific.SpecificRecordBase.equals(SpecificRecordBase.java:35)
>       at com.rr.eventdata.ViewRecord.equals(ViewRecord.java:350)
>       at com.rr.eventdata.WriteStuffTest.main(WriteStuffTest.java:143)
>       at 
> com.rr.eventdata.WriteStuffTest.testReadWriteDataFile(WriteStuffTest.java:55)
> {noformat}
> Also,  an array of string in SpecificRecord ends up as List<CharSequence>.  
> However, it should be List<? extends CharSequence> or else you can't assign a 
> List<String> to it.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to