avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Will Gorman (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (AVRO-1512) Error serializing TUnion with avro-thrift
Date Sat, 24 May 2014 02:35:01 GMT

    [ https://issues.apache.org/jira/browse/AVRO-1512?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14007970#comment-14007970
] 

Will Gorman commented on AVRO-1512:
-----------------------------------

The third option was also the approach I had tried as a temporary workaround. The only problem
I can see is if Java classes were compiled by Avro from the schema obtained from the Thrift
class. In that case the record created from the Thrift union would allow multiple fields to
be set and data serialized from the Avro class couldn't always be deserialized back into the
Thrift class.  I think that still feels preferable to only supporting unions that don't have
multiple branches of the same type though.

> Error serializing TUnion with avro-thrift
> -----------------------------------------
>
>                 Key: AVRO-1512
>                 URL: https://issues.apache.org/jira/browse/AVRO-1512
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.7.6
>            Reporter: Will Gorman
>            Assignee: Doug Cutting
>             Fix For: 1.7.7
>
>         Attachments: AVRO-1512.patch, test.thrift
>
>
> Attempting to serialize a Thrift union type (TUnion) with avro-thrift produces an error
like the following:
> {noformat}
> org.apache.avro.AvroRuntimeException: Unknown datum type org.apache.avro.thrift.test.FooOrBar:
<FooOrBar foo:foo>
> 	at org.apache.avro.generic.GenericData.getSchemaName(GenericData.java:639)
> 	at org.apache.avro.generic.GenericData.resolveUnion(GenericData.java:604)
> 	at org.apache.avro.generic.GenericDatumWriter.resolveUnion(GenericDatumWriter.java:151)
> 	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:71)
> 	at org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:114)
> 	at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104)
> 	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:66)
> 	at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58)
> 	at org.apache.avro.thrift.TestThrift.check(TestThrift.java:83)
> 	at org.apache.avro.thrift.TestThrift.testStruct(TestThrift.java:60)
> {noformat}
> Upon investigation it appears that ThriftData#isRecord intentionally does not accept
TUnion types as Avro records and so GenericData is unable to determine an Avro type for the
datum.  However, ThriftData#getSchema does generate an Avro record schema for Thrift union
types.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message