avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Doug Cutting (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (AVRO-1965) Reparsing an existing schema mutates the schema
Date Wed, 30 Nov 2016 16:23:58 GMT

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

Doug Cutting updated AVRO-1965:
-------------------------------
    Attachment: AVRO-1965.patch

Here's a patch that should fix this.  The null namespace was not set correctly for nested
schemas when parsing.

> Reparsing an existing schema mutates the schema
> -----------------------------------------------
>
>                 Key: AVRO-1965
>                 URL: https://issues.apache.org/jira/browse/AVRO-1965
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.8.1
>            Reporter: David Maughan
>            Priority: Minor
>             Fix For: 1.8.2
>
>         Attachments: AVRO-1965.patch
>
>
> h2. Overview
> In certain scenarios re-parsing a schema constructed via {{SchemaBuilder}} or {{Schema.createRecord}}
produces a schema that is no longer equal to the original. In the below example, after parsing
the existing schema, the namespace of the top level record is cascaded down to the bottom
level record. Note that the way the top level record is being created with the namespace as
part of the name {{default.a}} is the same way Hive's {{AvroSerDe}} constructs a schema from
a Hive table's metadata.
> h2. Failing test case
> {code}
> Schema d = SchemaBuilder.builder().intType();
> Schema c = SchemaBuilder.record("c").fields().name("d").type(d).noDefault().endRecord();
> Schema b = SchemaBuilder.record("b").fields().name("c").type(c).noDefault().endRecord();
> Schema a1 = SchemaBuilder.record("default.a").fields().name("b").type(b).noDefault().endRecord();
> Schema a2 = new Schema.Parser().parse(a1.toString());
> // a1 = {"type":"record","name":"a","namespace":"default","fields":[{"name":"b","type":{"type":"record","name":"b","namespace":"","fields":[{"name":"c","type":{"type":"record","name":"c","fields":[{"name":"d","type":"int"}]}}]}}]}
> // a2 = {"type":"record","name":"a","namespace":"default","fields":[{"name":"b","type":{"type":"record","name":"b","namespace":"","fields":[{"name":"c","type":{"type":"record","name":"c","namespace":"default","fields":[{"name":"d","type":"int"}]}}]}}]}
> assertThat(a2, is(a1));
> {code}



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

Mime
View raw message