[
https://issues.apache.org/jira/browse/AVRO-1883?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16222477#comment-16222477
]
ASF subversion and git services commented on AVRO-1883:
-------------------------------------------------------
Commit 011a856536a6d255dc6ecd077f5246ee95c0ff1c in avro's branch
refs/heads/branch-1.7 from [~rdblue]
[ https://git-wip-us.apache.org/repos/asf?p=avro.git;h=011a856 ]
AVRO-1883: Java: Fix incompatible schema detection nested in unions.
Contributed by Yibing Shi.
(cherry picked from commit 968550da18708c76fd04c13722d996461aa23cb7)
> 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.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)