Lucas Heimberg created AVRO-3012:
------------------------------------

             Summary: Unknown logical types are not ignored during 
deserialization but lead to an exception.
                 Key: AVRO-3012
                 URL: https://issues.apache.org/jira/browse/AVRO-3012
             Project: Apache Avro
          Issue Type: Bug
          Components: csharp
            Reporter: Lucas Heimberg


By specification (see 
[https://avro.apache.org/docs/current/spec.html#Logical+Types] ), unknown 
logical types and logical types with invalid specification should be ignored 
during deserialization and instead, the object of the underlying Avro type 
should be returned.

The C# implementation of Avro however raises an exception when such a logical 
type is found during parsing of a schema string. Therefore, it is not possible 
to parse a schema with a logical type using a version of the C# implementation 
of Avro that does not supports this logical type yet.

In particular, it is therefore as an example not possible to consume a binary 
encoded Avro datum that makes use of the logical type UUID (as available in 
Avro 1.10.1) with a deserializer using C# Avro 1.9.2. (by specification, the 
deserializer should fall back to the underlying string representation of the 
UUID).

This severly limits the downwards compability promised by the Avro 
specification.

 

During schema parsing, a LogicalSchema instance is created using the 
GetFromLogicalSchema method of the LogicalTypeFactory. This method has an 
optional parameter to ignore invalid logical  types, which is not used by the 
caller.

It is not completely obvious to me, whether an unsupported logical type should 
still be parsed as a LogicalSchema, although without a LogicalType, or whether 
it should be directly parsed as the underlying Avro type (in the implementation 
also called BaseSchema) - i.e., whether the downgrading to the underlying Avro 
type should happen already during parsing or later during deserialization using 
the schema. 

For the second case, a fix to the problem would also require an update to the 
ReadLogical method of the GenericReader class in order to support the case that 
the LogicalType of the writer schema is null.

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to