[jira] [Commented] (AVRO-2035) default value for boolean field cannot be a string

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[jira] [Commented] (AVRO-2035) default value for boolean field cannot be a string

JIRA jira@apache.org

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