avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hudson (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AVRO-1590) [java] AllowNull causes unexpected resolution failure
Date Mon, 29 Sep 2014 23:47:35 GMT

    [ https://issues.apache.org/jira/browse/AVRO-1590?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14152540#comment-14152540
] 

Hudson commented on AVRO-1590:
------------------------------

SUCCESS: Integrated in AvroJava #483 (See [https://builds.apache.org/job/AvroJava/483/])
AVRO-1590. Java: In resolving records in unions, permit structural and shortname matches when
fullname matching fails.  Contributed by Ryan Blue. (cutting: rev 1628335)
* /avro/trunk/CHANGES.txt
* /avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java
* /avro/trunk/lang/java/avro/src/test/java/org/apache/avro/TestSchemaValidation.java
* /avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/parsing/TestResolvingGrammarGenerator2.java


> [java] AllowNull causes unexpected resolution failure
> -----------------------------------------------------
>
>                 Key: AVRO-1590
>                 URL: https://issues.apache.org/jira/browse/AVRO-1590
>             Project: Avro
>          Issue Type: Bug
>    Affects Versions: 1.7.7
>            Reporter: Ryan Blue
>            Assignee: Ryan Blue
>             Fix For: 1.8.0
>
>         Attachments: AVRO-1590-1.patch, AVRO-1590-2.patch, AVRO-1590-3.patch
>
>
> If I try to read data serialized with a hand-written schema using a reflected schema
generated by AllowNull, even though all of the individual types can be read. Here is a failing
test:
> {code:java}
>   public static class Point {
>     double x;
>     double y;
>   }
>   public static class Circle {
>     Point center;
>     double radius;
>   }
>   @Test
>   public void testAllowNull() throws Exception {
>     new SchemaValidatorBuilder()
>         .canBeReadStrategy()
>         .validateLatest().validate(
>         SchemaBuilder.record("Circle").fields()
>             .name("center").type().record("Point").fields()
>             .requiredDouble("x")
>             .requiredDouble("y")
>             .endRecord().noDefault()
>             .requiredDouble("radius")
>             .endRecord(),
>         Arrays.asList(ReflectData.AllowNull.get().getSchema(Circle.class)));
>   }
> {code}
> The problem is that the {{ResolvingGrammarGenerator}} can't resolve a record with a nullable
record unless the two have the same [full name|https://github.com/apache/avro/blob/trunk/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java#L439].
> It is more work, but I think the check should be whether there is a readable record in
the union. Another alternative is to special case a nullable union and allow the record-level
resolution only in that case.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message