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 <[email protected]> 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.
>