avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sean Busbey (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (AVRO-1883) Schema validator cannot find broken backwards compatibility in Union type elements
Date Fri, 27 Oct 2017 14:49:00 GMT

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

Sean Busbey resolved AVRO-1883.
-------------------------------
       Resolution: Fixed
    Fix Version/s: 1.7.8

verify was clean this time. Pushed to 1.7.

> Schema validator cannot find broken backwards compatibility in Union type elements
> ----------------------------------------------------------------------------------
>
>                 Key: AVRO-1883
>                 URL: https://issues.apache.org/jira/browse/AVRO-1883
>             Project: Avro
>          Issue Type: Bug
>    Affects Versions: 1.8.1
>            Reporter: Yibing Shi
>            Assignee: Yibing Shi
>            Priority: Critical
>             Fix For: 1.7.8, 1.9.0, 1.8.2
>
>         Attachments: AVRO-1883.1.patch
>
>
> Consider below 2 schemas:
> *Schema 1*:
> {noformat}
> [
>   {
>     "type": "record",
>     "name": "rec1",
>     "fields": [
>       {
>         "name": "age",
>         "type": "long"
>       }
>     ]
>   },
>   {
>     "type": "record",
>     "name": "rec2",
>     "fields": [
>       {
>         "name": "username",
>         "type": "string"
>       }
>     ]
>   }
> ]
> {noformat}
> *Schema 2*:
> {noformat}
> [
>   {
>     "type": "record",
>     "name": "rec1",
>     "fields": [
>       {
>         "name": "age",
>         "type": "long"
>       },
>       {
>         "name": "address",
>         "type": "string"
>       }
>     ]
>   },
>   {
>     "type": "record",
>     "name": "rec2",
>     "fields": [
>       {
>         "name": "username",
>         "type": "string"
>       }
>     ]
>   }
> ]
> {noformat}
> The {{rec1}} field in these 2 unions are not compatible, because the {{address}} field
of {{rec1}} in the second one is not nullable. However, if we check them with validate like
below, validator doesn't return any error:
> {code}
>     final SchemaValidator backwardValidator = new SchemaValidatorBuilder().canReadStrategy().validateLatest();
>     final Schema schema1 = new Schema.Parser().parse(schema1Str);
>     final Schema schema2 = new Schema.Parser().parse(schema2Str);
>     backwardValidator.validate(schema2, Arrays.asList(schema1));
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message