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)

Reply via email to