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)