Yibing Shi created AVRO-1883:
--------------------------------
Summary: 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
Priority: Critical
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.3.4#6332)