[
https://issues.apache.org/jira/browse/AVRO-1704?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15390333#comment-15390333
]
Ryan Blue commented on AVRO-1704:
---------------------------------
For the createDatumReader/Writer change: it is [binary compatible because of
type
erasure|https://docs.oracle.com/javase/specs/jls/se7/html/jls-13.html#jls-13.4.13],
but not source compatible.
To work around not constructing these with the type parameter, some users will
cast to the right type, like this:
{code:lang=java}
DatumReader<GenericRecord> reader = (DatumReader<GenericRecord>)
GenericData.get().createDatumReader(schema);
{code}
That compiles in 1.8.1 because it is casting {{DatumReader}} to
{{DatumReader<GenericRecord>}}, but not with this change. After the change, it
returns a {{DatumReader<Object>}} that Java won't convert. The fix is to remove
the cast and then Java correctly infers that the type parameter is
{{GenericRecord}} instead of {{Object}}.
Do we guarantee source compatibility? Even if we do not, [~busbey], what do you
think about including this incompatibility?
> Standardized format for encoding messages with Avro
> ---------------------------------------------------
>
> Key: AVRO-1704
> URL: https://issues.apache.org/jira/browse/AVRO-1704
> Project: Avro
> Issue Type: Improvement
> Reporter: Daniel Schierbeck
> Assignee: Niels Basjes
> Fix For: 1.9.0, 1.8.3
>
> Attachments: AVRO-1704-2016-05-03-Unfinished.patch,
> AVRO-1704-20160410.patch
>
>
> I'm currently using the Datafile format for encoding messages that are
> written to Kafka and Cassandra. This seems rather wasteful:
> 1. I only encode a single record at a time, so there's no need for sync
> markers and other metadata related to multi-record files.
> 2. The entire schema is inlined every time.
> However, the Datafile format is the only one that has been standardized,
> meaning that I can read and write data with minimal effort across the various
> languages in use in my organization. If there was a standardized format for
> encoding single values that was optimized for out-of-band schema transfer, I
> would much rather use that.
> I think the necessary pieces of the format would be:
> 1. A format version number.
> 2. A schema fingerprint type identifier, i.e. Rabin, MD5, SHA256, etc.
> 3. The actual schema fingerprint (according to the type.)
> 4. Optional metadata map.
> 5. The encoded datum.
> The language libraries would implement a MessageWriter that would encode
> datums in this format, as well as a MessageReader that, given a SchemaStore,
> would be able to decode datums. The reader would decode the fingerprint and
> ask its SchemaStore to return the corresponding writer's schema.
> The idea is that SchemaStore would be an abstract interface that allowed
> library users to inject custom backends. A simple, file system based one
> could be provided out of the box.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)