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

radai rosenblatt commented on AVRO-2035:
----------------------------------------

Is there any reason why the schema parser shouldnt validate default values by 
default? given that such a schema, if it slips past the parser is not generally 
usable (any scenario where the default value come into play results in 
explosion) it seems this just leads to issues being discovered very late by 
users (as was the case for me).

Also, given that there are probably users out there with such schemas already 
out and about (again, me for example) - is there a reason not to at least try 
and accommodate and see if the string value happens to be parseable as a 
boolean? (maybe not do this by default, but configure the reader somehow ...)

> default value for boolean field cannot be a string
> --------------------------------------------------
>
>                 Key: AVRO-2035
>                 URL: https://issues.apache.org/jira/browse/AVRO-2035
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.8.1
>            Reporter: radai rosenblatt
>
> suppose i have the following schema evolution:
> {code}
> {
>   "name": "Bob",
>   "type": "record",
>   "fields": [
>     {"name": "f1", "type": "int"}
>   ]
> }
> {code}
> and then:
> {code}
> {
>   "name": "Bob",
>   "type": "record",
>   "fields": [
>     {"name": "f1", "type": "int"},
>     {"name": "f2", "type": "boolean", "default": "true"}
>   ]
> }
> {code}
> the default value for "f2" is specified as the _STRING_ "true" (and not the 
> literal boolean true). 
> if this default value is ever accessed (when reading a gen1-serialized object 
> as a gen2) we get this:
> {code}
> org.apache.avro.AvroTypeException: Non-boolean default for boolean: "true"
>       at 
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.encode(ResolvingGrammarGenerator.java:408)
>       at 
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.getBinary(ResolvingGrammarGenerator.java:307)
>       at 
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.resolveRecords(ResolvingGrammarGenerator.java:285)
>       at 
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.generate(ResolvingGrammarGenerator.java:118)
>       at 
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.generate(ResolvingGrammarGenerator.java:50)
>       at org.apache.avro.io.ResolvingDecoder.resolve(ResolvingDecoder.java:85)
>       at org.apache.avro.io.ResolvingDecoder.<init>(ResolvingDecoder.java:49)
>       at 
> org.apache.avro.io.DecoderFactory.resolvingDecoder(DecoderFactory.java:307)
>       at 
> org.apache.avro.generic.GenericDatumReader.getResolver(GenericDatumReader.java:127)
>       at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
> {code}
> yet Schema.parse() passes for this



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to