[ 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)