[ https://issues.apache.org/jira/browse/AVRO-1340?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16331615#comment-16331615 ]
Adam Bellemare edited comment on AVRO-1340 at 1/19/18 2:07 AM: --------------------------------------------------------------- The "None" column was meant to indicate that there was no field with that name present. I have updated the doc to change "None" to "No Field Present". This means the field did not exist in the writers schema. I think we are largely in agreement. The only point of contention I have is that in scenario 2 you listed above, using the field-default for an unknown symbol changes the existing functionality. Instead of an exception being thrown, the default value will be assigned. {code:java} "fields" : [ { "name" : "foo", "type" : { "type" : "enum", "name" : "Bar", "symbols" : [ "A", "B", "FieldDefault"] }, "default" : "FieldDefault" }] {code} If the schema above is used currently and a Writer writes with Symbol "C", upon reading the schema the Reader will throw an "Error reading Avro: org.apache.avro.AvroTypeException: No match for C" in my testing with the Java implementation. With the change you propose, it would not throw an exception but instead return "FieldDefault", though the schema would be the same in both cases. Do I understand that scenario correctly? My only real concern is about breaking existing behaviour. was (Author: abellemare): The "None" column was meant to indicate that there was no field with that name present. I have updated the doc to change "None" to "No Field Present". This means the field did not exist in the writers schema. I think we are largely in agreement. The only point of contention I have is that in scenario 2 you listed above, using the field-default for an unknown symbol changes the existing functionality. Instead of an exception being thrown, the default value will be assigned. {code:java} "fields" : [ { "name" : "foo", "type" : { "type" : "enum", "name" : "Bar", "symbols" : [ "A", "B", "FieldDefault"] }, "default" : "FieldDefault" }] {code} If the schema above is used currently and a Writer writes with Symbol "C", upon reading the schema the Reader will throw an "Error reading Avro: org.apache.avro.AvroTypeException: No match for C". With the change you propose, it would not throw an exception but instead return "FieldDefault", though the schema would be the same in both cases. Do I understand that scenario correctly? My only real concern is about breaking existing behaviour. > use default to allow old readers to specify default enum value when > encountering new enum symbols > ------------------------------------------------------------------------------------------------- > > Key: AVRO-1340 > URL: https://issues.apache.org/jira/browse/AVRO-1340 > Project: Avro > Issue Type: Improvement > Components: spec > Environment: N/A > Reporter: Jim Donofrio > Priority: Minor > > The schema resolution page says: > > if both are enums: > > if the writer's symbol is not present in the reader's enum, then an > error is signalled. > This makes it difficult to use enum's because you can never add a enum value > and keep old reader's compatible. Why not use the default option to refer to > one of enum values so that when a old reader encounters a enum ordinal it > does not recognize, it can default to the optional schema provided one. If > the old schema does not provide a default then the older reader can continue > to fail as it does today. -- This message was sent by Atlassian JIRA (v7.6.3#76005)