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

Philip Zeyliger commented on AVRO-75:
-------------------------------------

I was under the impression that you were not allowed to read the schema 
record(a=string) with the schema record(b=string), i.e., that this would throw 
an exception when the schemas were being reconciled.  If the reader wanted to 
be open to unset fields, he could explicitly read with 
record(b=union(null,string)) or record(b=string(default="foo")).

I think failing fast here is good behavior.  If you're using a schema 
record(b=string), then you expect to be able to use record.b without checking, 
first, that b is not null.  In the RPC case especially, if some rogue-ish 
client (one that was too old, or had a typo) came by, my server would simply 
throw NPE, instead of usefully telling me where the schema went wrong.

For types where null is not an option (int), you'd see even more specific 
behavior (because int would default, presumably, to 0).  If we have so much 
type information, I'd rather not ask the user to check isSet(field_name) before 
every usage.

> Clarify resolution for enums (and fix code)
> -------------------------------------------
>
>                 Key: AVRO-75
>                 URL: https://issues.apache.org/jira/browse/AVRO-75
>             Project: Avro
>          Issue Type: Bug
>          Components: spec
>            Reporter: Raymie Stata
>            Assignee: Doug Cutting
>             Fix For: 1.3.0
>
>
> The current resolution rule for enum's says: "if the writer's symbol is not 
> present in the reader's enum, then the enum value is unset."  This is the 
> only place the word "unset" is used in the doc, it's not clear what you mean. 
>  The code seems to be inconsistent: GenericDatumReader will happily return a 
> symbol the reader doesn't understand; ReflectDatumReader will probably throw 
> a class-not-found exception; ResolvingDecoder throws an error.
> I propose that we declare this case an error, i.e., rewrite the spec to "if 
> the writer's symbol is not listed in the reader's enum, an error is 
> signaled."  GenericDatumReader should be updated to throw an error in this 
> case.
> If we decide to stick with the "unset" language, we need to define what 
> "unset" means (and, if necessary, update ReflectDatumReader and 
> ResolvingDecoder).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to