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