[prev in list] [next in list] [prev in thread] [next in thread] 

List:       avro-dev
Subject:    [jira] [Updated] (AVRO-891) Change SpecificDatumReader to default reader schema from loaded class
From:       "Doug Cutting (JIRA)" <jira () apache ! org>
Date:       2011-09-22 19:09:26
Message-ID: 1533310088.3347.1316718566813.JavaMail.tomcat () hel ! zones ! apache ! org
[Download RAW message or body]


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

Doug Cutting updated AVRO-891:
------------------------------

    Resolution: Fixed
        Status: Resolved  (was: Patch Available)

I committed this.

> Change SpecificDatumReader to default reader schema from loaded class
> ---------------------------------------------------------------------
> 
> Key: AVRO-891
> URL: https://issues.apache.org/jira/browse/AVRO-891
> Project: Avro
> Issue Type: Improvement
> Components: java
> Affects Versions: 1.5.4
> Environment: OSX 10.7
> Reporter: Alex Holmes
> Assignee: Doug Cutting
> Fix For: 1.6.0
> 
> Attachments: AVRO-891.patch, AVRO-891.patch
> 
> 
> An AvroRuntimeException exception is thrown when attempting to read an Avro file \
> serialized with an older version of a schema containing a field which has been \
>                 subsequently removed in the newer schema.
> *Exception*
> {code}
> Exception in thread "main" org.apache.avro.AvroRuntimeException: Bad index
> 	at Record.put(Unknown Source)
> 	at org.apache.avro.generic.GenericData.setField(GenericData.java:463)
> 	at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:166)
>   at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:138)
> 	at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:129)
> 	at org.apache.avro.file.DataFileStream.next(DataFileStream.java:233)
> 	at org.apache.avro.file.DataFileStream.next(DataFileStream.java:220)
> 	at Read.readFromAvro(Unknown Source)
> 	at Read.main(Unknown Source)
> {code}
> *Steps to reproduce*
> #  Generate code for schema v1 and v2
> #  Write an Avro file with the v1 code-generated Record class using the \
> DataFileWriter and SpecificDatumWriter #  (informational only) Read the Avro file \
> using the v1 code-generated Record class using DataFileStream and \
> SpecificDatumReader (output follows) {code}
> Record@2ec791b9[name=r1,id=1]
> Record@bd86fd3[name=r2,id=2]
> {code}
> #  Read the Avro file using the v2 code-generated Record class using DataFileStream \
>                 and SpecificDatumReader
> *Schema details*
> v1 schema:
> {code}
> {"name": "Record", "type": "record",
> "fields": [
> {"name": "name", "type": "string"},
> {"name": "id", "type": "int"}
> ]
> }
> {code}
> v2 schema:
> {code}
> {"name": "Record", "type": "record",
> "fields": [
> {"name": "name", "type": "string"}
> ]
> }
> {code}
> *Write code*
> {code}
> public static Record createRecord(String name, int id) {
> Record record = new Record();
> record.name = name;
> record.id = id;
> return record;
> }
> public static void writeToAvro(OutputStream outputStream)
> throws IOException {
> DataFileWriter<Record> writer =
> new DataFileWriter<Record>(new SpecificDatumWriter<Record>());
> writer.create(Record.SCHEMA$, outputStream);
> writer.append(createRecord("r1", 1));
> writer.append(createRecord("r2", 2));
> writer.close();
> outputStream.close();
> }
> {code}
> *Read code*
> {code}
> public static void readFromAvro(InputStream is) throws IOException {
> DataFileStream<Record> reader = new DataFileStream<Record>(
> is, new SpecificDatumReader<Record>());
> for (Record a : reader) {
> System.out.println(ToStringBuilder.reflectionToString(a));
> }
> IOUtils.cleanup(null, is);
> IOUtils.cleanup(null, reader);
> }
> {code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic