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)