Update:

I had a go at modifying org.apache.avro.SchemaValidatorBuilder to use
SchemaCompatibility and have then run schema compatibility test suites
from both the Avro project and Confluent's Schema registry. Every case that
is tested appears to continue to function correctly with one exception;
SchemaCompatibility appears to favourably consider aliases when performing
name based compatibility checks whereas the implementation provided via
SchemaValidatorBuilder is more strict, and does not.

The specification <http://avro.apache.org/docs/1.8.1/spec.html#Aliases>
makes no definitive judgement on the matter, simply stating that 'an
implementation may optionally use aliases'. Should perhaps this be
configurable in the aforementioned implementations so that the user can
decide and also have a chance of obtaining consistent behaviour?

Elliot.

On 22 February 2017 at 13:48, Elliot West <[email protected]> wrote:

> 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.
>>
>
>

Reply via email to