You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Elliot West (JIRA)" <ji...@apache.org> on 2017/02/23 12:01:44 UTC
[jira] [Created] (AVRO-2003) Report location
Elliot West created AVRO-2003:
---------------------------------
Summary: Report location
Key: AVRO-2003
URL: https://issues.apache.org/jira/browse/AVRO-2003
Project: Avro
Issue Type: Improvement
Components: java
Affects Versions: 1.8.1
Environment: Any java env
Reporter: Elliot West
Priority: Minor
Fix For: 1.9.0
h2. Overview
Building on the work to improve schema incompatibility reporting in AVRO-1933, it would be useful if the {{SchemaCompatibility}} classes could also report the location in the schema where any incompatibility was encountered.
It is recommended that the location reported is both easily readable by humans and machines. In the first case this would assist schema developers to pin-point issues in there schema documents, and in the latter case it provides a useful mechanism to schema tooling, such as IDEs and editors, to easily select the pertinent nodes in the Schema document tree.
h2. Implementation specifics
To meet this requirements it is suggested that the location is encoded using the [JSON Pointer specification|https://tools.ietf.org/html/rfc6901]. This is both easily parsed by users, but is also supported by a number of libraries for a range of common programming languages and platforms.
h2. Examples
Given the following example schema, consider some incompatibility scenarios. For each case an expected JSON Pointer description of the incompatibility location is described:
{code}
{
"type": "record",
"name": "myRecord",
"fields" : [
{"name": "pField", "type": "long"},
{"name": "uField", "type":
["null", "int", "string"]
},
{"name": "eField", "type":
{ "type": "enum", "name": "Suit", "symbols" : ["SPADES", "HEARTS", "DIAMONDS", "CLUBS"] }
},
{"name": "aField", "type":
{"type": "array", "items": "string"}
},
{"name": "mField", "type":
{"type": "map", "values": "long"}
},
{"name": "fField", "type":
{"type": "fixed", "size": 16, "name": "md5"}
}
]
}
{code}
Possible incompatibility scenarions and the location that would be reported back to the user/tool:
* Root type incompatibility; report location: {{/}}
* Record name mismatch; report location: {{/name}}
* {{pField}} type incompatibility; report location: {{/fields/0/type}}
* {{uField}} field type incompatibility; report location: {{/fields/1/type}}
* {{uField}} missing union branch {{string}}; report location: {{/fields/1/type/2}}
* {{eField}} field type incompatibility; report location: {{/fields/2/type}}
* {{eField}} missing enum symbol; report location: {{/fields/2/type/symbols}}
* {{eField}} enum name mismatch; report location: {{/fields/2/type/name}}
* {{aField}} field type incompatibility; report location: {{/fields/3/type}}
* {{aField}} array element type incompatibility; report location: {{/fields/3/type/items}}
* {{mField}} field type incompatibility; report location: {{/fields/4/type}}
* {{mField}} map value type incompatibility; report location: {{/fields/4/type/values}}
* {{fField}} field type incompatibility; report location: {{/fields/5/type}}
* {{fField}} fixed name mismatch; report location: {{/fields/5/type/name}}
* {{fField}} fixed size type incompatibility; report location: {{/fields/5/type/size}}
* {{fField}} missing default value; report location: {{/fields/5}}
h2. Notes
* This ticket depends on AVRO-1933 and associated patches.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)