[
https://issues.apache.org/jira/browse/AVRO-2400?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16846683#comment-16846683
]
Raymie Stata commented on AVRO-2400:
------------------------------------
Sorry for the delay getting back to you. Thanks for reporting this issue!
The underlying issue here is an ambiguity in the specification. The spec
reads: "both schemas are enums whose names match, [or] both schemas are fixed
whose sizes and names match, [or] both schemas are records with the same name."
But the specification is not clear as to whether the "name" here is the
name-space qualified name, or the unqualified name. The old implementation
took the position that "name" here meant the unqualified name, and there
doesn't seem like a good reason to reverse this approach right now.
The following would be a good way to fix this bug:
1) Yes, please do submit your reproduction as a test case for the future.
2) Please also update the spec to replace "name[s]" with "(unqualified)
name[s]" in the places just quoted.
3) On line 695 of Resolver.java (i.e., in the unionEquiv method), please
replace the three occurrences of ".getFullName" with ".getName" -- that should
fix the problem in the most surgical means possible. (I'm a bit nervous about
re-ordering the WRITER_UNION and READER_UNION cases as you do in your first,
suggested fix. And completely wiping out the guard on line 694 would
completely eliminate any name-based checking, which would relax the spec even
further, which I don't think we want to do).
> Avro 1.9.0 can't resolve schemas that can be resolved in 1.8.2
> --------------------------------------------------------------
>
> Key: AVRO-2400
> URL: https://issues.apache.org/jira/browse/AVRO-2400
> Project: Apache Avro
> Issue Type: Bug
> Components: java
> Reporter: Jacob Tolar
> Priority: Blocker
> Fix For: 1.10.0, 1.9.1
>
>
> The failure occurs in ResolvingGrammarGenerator when reader and writer schema
> have an array of records with different full names (e.g. different
> namespace).
> {code:java}
> Exception in thread "main" java.lang.ClassCastException:
> org.apache.avro.Resolver$ReaderUnion cannot be cast to
> org.apache.avro.Resolver$Container{code}
> Avro 1.8.2 allowed this behavior but it now fails in 1.9.0. Looking at the
> jiras and code, I don't believe this was intentional ( AVRO-2275,
> [https://github.com/apache/avro/commit/39d959e1c6a1f339f03dab18289e47f27c10be7f]
> ).
>
> It looks like there were some attempts to keep compatibility (
> [https://github.com/apache/avro/blob/branch-1.9/lang/java/avro/src/main/java/org/apache/avro/Resolver.java]
> , e.g. see the commented out check for w.getFullName() in resolve()) but
> this case was missed.
>
> See this simple example to reproduce.
> [https://gist.github.com/jacobtolar/c88d43ab4e8767227891e5cdc188ffad]
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)