Ryan Sobol created AVRO-2294:
--------------------------------

             Summary: The schema validator reports false negatives for any 
incompatible change to an {{enum}} type
                 Key: AVRO-2294
                 URL: https://issues.apache.org/jira/browse/AVRO-2294
             Project: Apache Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.8.2
            Reporter: Ryan Sobol


The schema validator reports false negatives for any incompatible change to an 
{{enum}} type. I found this bug when invoking the 
{{SchemaValidatorBuilder.mutualReadStrategy()}} method via Confluent's [Schema 
Registry|https://github.com/confluentinc/schema-registry/blob/master/client/src/main/java/io/confluent/kafka/schemaregistry/avro/AvroCompatibilityChecker.java#L44].

This bug can be traced to the 
[{{Symbol.hasErrors()}}|https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/io/parsing/Symbol.java#L394]
 method. When it is invoked with a 
[{{Symbol.EnumAdjustAction}}|https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/io/parsing/Symbol.java#L509]
 object, it always (and therefore incorrectly) returns {{false}}. This is a 
problem because these objects can definitely have errors—masquerading along 
side 
[{{adjustments}}|https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/io/parsing/ResolvingGrammarGenerator.java#L502].

The root cause of this bug has to do with objects of the 
{{Symbol.EnumAdjustAction}} class being assigned a 
[{{Kind.EXPLICIT_ACTION}}|https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/io/parsing/Symbol.java#L504]
 kind. This kind informs the {{Symbol.hasErrors()}} method to always [{{return 
false}}|https://github.com/apache/avro/blob/master/lang/java/avro/src/main/java/org/apache/avro/io/parsing/Symbol.java#L409]
 without checking if there are any errors hiding inside the object's 
{{adjustments}}.

As best I understand, there are a few possible solutions:

# Fix the {{Symbol.hasErrors()}} method so it checks the objects 
{{adjustments}}.
# Fix the {{Symbol.EnumAdjustAction}} class so its objects have a different 
{{kind}}.
# Fix both 1 and 2.

I'm not 100% familiar with the intention of the {{Symbol}} class. However, if 
given a little guidance on the preferred solution, I'm happy to submit a pull 
request to fix the bug. 

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to