avro-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Doug Cutting (JIRA)" <j...@apache.org>
Subject [jira] Reopened: (AVRO-313) Default values for fields or records and array (or map) don't work with ResolvingDecoder
Date Thu, 14 Jan 2010 23:28:54 GMT

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

Doug Cutting reopened AVRO-313:
-------------------------------


This change causes a unit tests to fail:

Testcase: testUnion took 0.062 sec
	Caused an ERROR
Encoded data does not match. expected:<{"Foo"[:{}}]> but was:<{"Foo"[]>
	at org.apache.avro.TestSchema.checkJson(TestSchema.java:389)
	at org.apache.avro.TestSchema.testUnion(TestSchema.java:226)

Please run 'ant clean test-java' before committing.

> Default values for fields or records and array (or map) don't work with ResolvingDecoder
> ----------------------------------------------------------------------------------------
>
>                 Key: AVRO-313
>                 URL: https://issues.apache.org/jira/browse/AVRO-313
>             Project: Avro
>          Issue Type: Bug
>          Components: java
>            Reporter: Thiruvalluvan M. G.
>            Assignee: Thiruvalluvan M. G.
>         Attachments: AVRO-313-test.patch, AVRO-313.patch
>
>
> If the writer's and reader's schema are different and reader's schema defines a field
with a default while the writer's does not have that field, the ResolovingDecoder returns
the default value for the field to the reader. This is accomplished by replacing the actual
InputStream with the one that has the default value. Remember the actual input stream didn't
have a value for the field. Now the original input stream is restored by an implicit action
called DEFAULT_END_ACTION. If the record is the last in a slice of an array(or a map), the
code used to see (after consuming the record) if there are any more entries in the array(map).
This check should happen on the original input stream. Since the input stream has not been
restored, the check happens on the default-value input stream causing error.
> The following patch solves this by consuming all "trailing" implicit actions before looking
for further entries in the array(map). There was already a method Parser.processImplicitActions()
which consumed _all_ implicit actions. It turns out one needs to consume only the trailing
implicit action. So I renamed the method to processTrailingImplicitActions and changed the
code to meet the new specification.
> I also added a couple of tests that catch the problem.
> First apply the patch for the tests, you'd see the problem. Then apply the fix and see
that the problem go away.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message