Apache avro schema resolution throws an error, when deserializing, if the 
writer's enum  symbol is not present in the reader's enum definition[1]. To 
illustrate with example consider the following enum that is shared by the 
writer and the reader.

Version1:
protocol SampleProtocol {
          enum Suit{
                    SPADES, HEARTS, CLUBS
          }
    record Card {
        Suit suit;
    }
}
Now if the writer  adds a new value "DIAMONDS" to the Suit enum and serializes 
a datum with the "DIAMONDS"

Version2:
protocol SampleProtocol {
          enum Suit{
                    SPADES, HEARTS, CLUBS, DIAMONDS
          }
    record Card {
        Suit suit;
    }
}
Now Reader,when deserializing with version 1 of the schema, will thrown an 
error  as it does not understand "DIAMONDS". This forces the reader and the 
writer enum definitions to be sync.

As this is a non passive change whenever a enum gets updated, I am curios why 
this was designed to be non-passive, rather than simply ignoring the new value 
or giving a "special" unsupported enum value if the enum is required.

CONFIDENTIALITY NOTICE This message and any included attachments are from 
Cerner Corporation and are intended only for the addressee. The information 
contained in this message is confidential and may constitute inside or 
non-public information under international, federal, or state securities laws. 
Unauthorized forwarding, printing, copying, distribution, or use of such 
information is strictly prohibited and may be unlawful. If you are not the 
addressee, please promptly delete this message and notify the sender of the 
delivery error by e-mail or you may call Cerner's corporate offices in Kansas 
City, Missouri, U.S.A at (+1) (816)221-1024.

Reply via email to