[ 
https://issues.apache.org/jira/browse/AVRO-1512?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Will Gorman updated AVRO-1512:
------------------------------

    Description: 
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.

  was:
Attempting to serialize a Thrift union type (TUnion) with avro-thrift produces 
an error like the following:

{code}
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)
{code}

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.


> 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
>
> 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)

Reply via email to