[ 
https://issues.apache.org/jira/browse/AVRO-2140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17180973#comment-17180973
 ] 

Felix GV commented on AVRO-2140:
--------------------------------

The issue raised here is actually a serious bug. The standard Avro Java library 
is NOT compliant with the Avro spec, since it merely emits a warning instead of 
failing fast and loudly.

Things appear to be fine when using a non-spec-compliant schema, but later on 
fail if attempting schema evolution. When a field for which such improperly 
defined default is present in the reader schema, but missing from the writer 
schema, the resolving decoder will fail at deserialization time.

Since many systems register schemas and keep them as eternal and immutable 
metadata, this creates a big challenge. The bad schemas ought to have never 
been registered in the first place, but because the Avro schema parser is too 
permissive, and merely emits a meek warning that can easily be overlooked, we 
end up discovering the schema issue only much later, when a second schema is 
registered and schema evolution fails.

> Validation of Union Schemas
> ---------------------------
>
>                 Key: AVRO-2140
>                 URL: https://issues.apache.org/jira/browse/AVRO-2140
>             Project: Apache Avro
>          Issue Type: Improvement
>          Components: java
>    Affects Versions: 1.8.2
>            Reporter: Marcos Lopez Gonzalez
>            Priority: Minor
>
> When validating a union Schema in the method
> {code:java}
> Schema.isValidDefault(Schema schema, JsonNode defaultValue){code}
> for the case of UNION it only validates the first type of the union: 
> {code:java}
> case UNION: // union default: first branch
> return isValidDefault(schema.getTypes().get(0), defaultValue);
> {code}
> This leads to some warnings that can create confusion.
> For example, if you have a field like this:
> {code:java}
> {
>   "name" : "synonym",
>   "type" : [ "null", "boolean" ],
>   "default" : false
> }
> {code}
> {{and you assign it false as default you get this warning because it only 
> validates that false is not null:}}
> {code:java}
> [WARNING] Avro: Invalid default for field synonym: false not a 
> ["null","boolean"]{code}
> I think in this cases the validation should check all the types of the union 
> to avoid these warnings.
> I would be happy to create a PR to improve this if you think we should go for 
> it.
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to