You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Chin Huang (Jira)" <ji...@apache.org> on 2022/08/22 04:52:00 UTC

[jira] [Created] (AVRO-3612) Report specific location of incompatibility in record schema

Chin Huang created AVRO-3612:
--------------------------------

             Summary: Report specific location of incompatibility in record schema
                 Key: AVRO-3612
                 URL: https://issues.apache.org/jira/browse/AVRO-3612
             Project: Apache Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.11.1
            Reporter: Chin Huang


Given a reader schema for a record with a field having a mandatory value:
{code:json}
{
  "type" : "record",
  "name" : "Account",
  "fields" : [ {
    "name" : "age",
    "type" : "int"
  } ]
}
{code}
and a writer schema for a record with a field having a nullable value:
{code:json}
 {
  "type" : "record",
  "name" : "Account",
  "fields" : [ {
    "name" : "age",
    "type" : [ "null", "int" ],
    "default" : null
  } ]
} 
{code}
invoking SchemaCompatibility.checkReaderWriterCompatibility(readerSchema, writerSchema) finds an incompatibility with message:
{noformat}
reader type: INT not compatible with writer type: NULL{noformat}
and location:
{noformat}
/{noformat}
However, I want it to instead tell me the specific location of the incompatibility in the record schema:
{noformat}
/fields/0/type/0
{noformat}
This failing unit test demonstrates the bug:
{code:java}
class SchemaCompatibilityTest {

  @Test
  void given_incompatibility_in_record_schema_then_found_incompatibility_location() {
    var mandatorySchema = SchemaBuilder.record("Account").fields()
        .name("age").type().intType().noDefault()
        .endRecord();
    var optionalSchema = SchemaBuilder.record("Account").fields()
        .optionalInt("age")
        .endRecord();

    var compatibility = SchemaCompatibility.checkReaderWriterCompatibility(
        mandatorySchema, optionalSchema);

    assertThat(compatibility.getType()).isEqualTo(SchemaCompatibilityType.INCOMPATIBLE);

    var incompatibility = compatibility.getResult().getIncompatibilities().get(0);
    assertThat(incompatibility.getMessage()).isEqualTo("reader type: INT not compatible with writer type: NULL");
    assertThat(incompatibility.getLocation()).isEqualTo("/fields/0/type/0");
  }
}
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)