Further to this, is there any reason why conceptually, the implementation
of org.apache.avro.ValidateMutualRead.canRead(Schema, Schema) could not be
changed from:

  static void canRead(Schema writtenWith, Schema readUsing)
      throws SchemaValidationException {
    boolean error;
    try {
      error = Symbol.hasErrors(new ResolvingGrammarGenerator().generate(
          writtenWith, readUsing));
    } catch (IOException e) {
      throw new SchemaValidationException(readUsing, writtenWith, e);
    }
    if (error) {
      throw new SchemaValidationException(readUsing, writtenWith);
    }
  }


to:

  static void canRead(Schema writtenWith, Schema readUsing)
      throws SchemaValidationException {
    SchemaCompatibilityType compatibilityType
      = SchemaCompatibility.checkReaderWriterCompatibility(readUsing,
writtenWith).getType();
    if (compatibilityType != SchemaCompatibilityType.COMPATIBLE) {
      throw new SchemaValidationException(readUsing, writtenWith);
    }
  }


Or am I missing something fundamental?

Thanks,

Elliot.

On 17 February 2017 at 12:27, Elliot West <tea...@gmail.com> wrote:

> Hi,
>
> I've been attempting to understand the implementation of Avro schema
> compatibility rules and am slightly confused by the structure of the code.
> It seems that there are at least two possible entry points:
>
>    - 
> org.apache.avro.SchemaCompatibility.checkReaderWriterCompatibility(Schema,
>    Schema)
>    - org.apache.avro.SchemaValidatorBuilder
>
> The code paths of these do not seem to intersect, with one implementing a
> static set of rule checks and the other seemingly delegating to grammar
> based approach. Does this imply that there are in fact two implementations
> of the compatibility rules?
>
> Apologies if this is a naïve question.
>
> Thanks,
>
> Elliot.
>

Reply via email to