Hey,

We are using Avro via the Clojure wrapper Abracad 
(https://github.com/ovotech/abracad). When adding schemas, it's sometimes quite 
difficult to get the order of type definitions correct and we often encounter 
"can't redefine ..." errors. To make this easier we had an idea that instead of 
checking whether a type has been defined already using only its name, we could 
then check the structure of the existing type with the new one and if they are 
identical not throw an error at all. This should allow the same type to be 
parsed in multiple places if it's not been changed.

We forked off of the main branch of your library and started playing with that 
idea (see our code here: 
https://github.com/apache/avro/compare/master...cjones1122:avro:allow-redefine-if-exactly-the-same),
 only adding an additional predicate to the put() methods in Schema and 
SchemaBuilder where the exception is currently thrown. Now if a type already 
exists it will compare it using the existing equals() function and only throw 
an error if they differ structurally. Since we don't know all the caveats we'd 
like to ask if this is a possible/sensible approach and a change you'd be 
interested in getting into the library?

We also created some tests in TestSchema and TestSchemaBuilder which mostly 
seem to work as we had hoped; however, the test 
"TestSchema#testSameRecordSameNameSucceedBeingParsedTwice" parses the same 
record twice and throws the can't redefine exception. We are not sure why this 
happens with our added changes and would appreciate any feedback/help with this.

Many thanks,
Cody Jones
Privileged or confidential information may be contained in this message. If you 
are not the addressee of this message please notify the sender by return and 
thereafter delete the message, and you may not use, copy, disclose or rely on 
the information contained in it. Internet e-mail may be susceptible to data 
corruption, interception and unauthorised amendment for which Gresham does not 
accept liability. Whilst we have taken reasonable precautions to ensure that 
this e-mail and any attachments have been swept for viruses, Gresham does not 
accept liability for any damage sustained as a result of viruses. Statements in 
this message that do not relate to the business of Gresham are neither given 
nor endorsed by the company or its directors. Gresham Technologies plc 
Registered in England and Wales. Company No. 01072032 Registered Office: 
Aldermary House, 10-15 Queen Street, London, EC4N 1TX. Further information 
about Gresham Technologies can be found on our website: www.greshamtech.com

Reply via email to