[ https://issues.apache.org/jira/browse/AVRO-695?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sachin Goyal updated AVRO-695: ------------------------------ Attachment: avro_circular_refs_2014_06_14.zip [~cutting], excellent suggestion. I have made the suggested changes in the new patch: 1) If {code}ReflectData.setCircularRefIdPrefix("some-field-name"){code} is set, Avro converts each RECORD schema into a UNION schema such that it can either be a record or a string. This should make circular references readable by other implementations of Avro like c, c++, php, ruby etc. (AllowNull also works with this). 2) Added some thread-safe constructs like ThreadLocal for hash-maps used in circular reference code. 3) Enhanced the test-case (with detailed comments) to test regular deserialization and circular deserialization for a circular-ref serialized Avro. > Cycle Reference Support > ----------------------- > > Key: AVRO-695 > URL: https://issues.apache.org/jira/browse/AVRO-695 > Project: Avro > Issue Type: New Feature > Components: spec > Affects Versions: 1.7.6 > Reporter: Moustapha Cherri > Attachments: avro-1.4.1-cycle.patch.gz, avro-1.4.1-cycle.patch.gz, > avro_circular_references.zip, avro_circular_refs_2014_06_14.zip > > Original Estimate: 672h > Remaining Estimate: 672h > > This is a proposed implementation to add cycle reference support to Avro. It > basically introduce a new type named Cycle. Cycles contains a string > representing the path to the other reference. > For example if we have an object of type Message that have a member named > previous with type Message too. If we have have this hierarchy: > message > previous : message2 > message2 > previous : message2 > When serializing the cycle path for "message2.previous" will be "previous". > The implementation depend on ANTLR to evaluate those cycle at read time to > resolve them. I used ANTLR 3.2. This dependency is not mandated; I just used > ANTLR to speed thing up. I kept in this implementation the generated code > from ANTLR though this should not be the case as this should be generated > during the build. I only updated the Java code. > I did not make full unit testing but you can find "avrotest.Main" class that > can be used a preliminary test. > Please do not hesitate to contact me for further clarification if this seems > interresting. > Best regards, > Moustapha Cherri -- This message was sent by Atlassian JIRA (v6.2#6252)