Hi, I'm trying to define a union schema which is backward compatible.
This is similar to the example in http://apache-avro.679487.n3.nabble.com/Avro-union-compatibility-mode-enhancement-proposal-td4034377.html I have the original schema as below record BaseOrg { > long orgId; > } > record Org { > long orgId; > string name; > } > record Address { > string city; > string state; > } > record ExtendedOrg { > long orgId; > string name; > string industry; > } union { > null, > BaseOrg, > Org, > ExtendedOrg > } org=null; This is just some example code (I could have added some of the fields to the original org ) Now I have evolved this schema to > > union { > null, > BaseOrg, > Org, > ExtendedOrg > ,ExtendedOrg2 > } org=null; > record ExtendedOrg2 { > long orgId; > string name; > boolean active; > string geography; > string industry; > } I have a consumer with the old schema and a producer with the new schema I saw in the JIRA https://issues.apache.org/jira/browse/AVRO-1590?focusedCommentId=14150780&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-14150780 considering this I would imagine when a producer sets the "ExtendedOrg2" branch in the producer, The consumer who doesn't understand that should match to either of BaseOr, Org, ExtendedOrg. But I get the below exception java.lang.ArrayIndexOutOfBoundsException: 4 > at org.apache.avro.io.parsing.Symbol$Alternative.getSymbol(Symbol.java:460) > at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:283) > at > org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:178) > at > org.apache.avro.specific.SpecificDatumReader.readField(SpecificDatumReader.java:136) > at > org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:237) > at > org.apache.avro.specific.SpecificDatumReader.readRecord(SpecificDatumReader.java:123) > at > org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:170) > at > org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:151) > at > org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:144) > at com.five9.dataservices.avro.AgentReader.toEvent(AgentReader.java:101) > at com.five9.dataservices.avro.AgentReader.read(AgentReader.java:83) > at com.five9.dataservices.avro.AgentReader.main(AgentReader.java:59) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:498) > at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:282) > at java.lang.Thread.run(Thread.java:748) I would like to know if I understand the JIRA comments wrong or if something's wrong with my schema Thanks Kishore