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.


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.

Reply via email to