You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by th...@apache.org on 2010/04/19 13:10:59 UTC
svn commit: r935526 - in /hadoop/avro/trunk: ./
lang/java/src/java/org/apache/avro/generic/
lang/java/src/java/org/apache/avro/io/
lang/java/src/test/java/org/apache/avro/io/
Author: thiru
Date: Mon Apr 19 11:10:58 2010
New Revision: 935526
URL: http://svn.apache.org/viewvc?rev=935526&view=rev
Log:
AVRO-517. Resolving Decoder fails in some cases
Modified:
hadoop/avro/trunk/CHANGES.txt
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java
hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java
Modified: hadoop/avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/CHANGES.txt?rev=935526&r1=935525&r2=935526&view=diff
==============================================================================
--- hadoop/avro/trunk/CHANGES.txt (original)
+++ hadoop/avro/trunk/CHANGES.txt Mon Apr 19 11:10:58 2010
@@ -44,6 +44,8 @@ Avro 1.4.0 (unreleased)
AVRO-518. Add link to boost filesystem library. (John Plevyak via sbanacho)
+ AVRO-517. Resolving Decoder fails in some cases. (thiru)
+
Avro 1.3.2 (31 March 2010)
IMPROVEMENTS
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java?rev=935526&r1=935525&r2=935526&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java Mon Apr 19 11:10:58 2010
@@ -67,7 +67,10 @@ public class GenericDatumReader<D> imple
if (resolver == null) {
resolver = ResolvingDecoder.resolve(actual, expected);
}
- return (D) read(reuse, expected, new ResolvingDecoder(resolver, in));
+ ResolvingDecoder r = new ResolvingDecoder(resolver, in);
+ D result = (D) read(reuse, expected, r);
+ r.drain();
+ return result;
}
/** Called to read data.*/
Modified: hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java?rev=935526&r1=935525&r2=935526&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java (original)
+++ hadoop/avro/trunk/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java Mon Apr 19 11:10:58 2010
@@ -121,6 +121,25 @@ public class ResolvingDecoder extends Va
return ((Symbol.FieldOrderAction) parser.advance(Symbol.FIELD_ACTION)).
fields;
}
+
+ /**
+ * Consume any more data that has been written by the writer but not
+ * needed by the reader so that the the underlying decoder is in proper
+ * shape for the next record. This situation happens when, for example,
+ * the writer writes a record with two fields and the reader needs only the
+ * first field.
+ *
+ * This function should be called after completely decoding an object but
+ * before next object can be decoded from the same underlying decoder
+ * either directly or through another resolving decoder. If the same resolving
+ * decoder is used for the next object as well, calling this method is
+ * optional; the state of this resolving decoder ensures that any leftover
+ * portions are consumed before the next object is decoded.
+ * @throws IOException
+ */
+ public final void drain() throws IOException {
+ parser.processImplicitActions();
+ }
@Override
public long readLong() throws IOException {
Modified: hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java
URL: http://svn.apache.org/viewvc/hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java?rev=935526&r1=935525&r2=935526&view=diff
==============================================================================
--- hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java (original)
+++ hadoop/avro/trunk/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java Mon Apr 19 11:10:58 2010
@@ -79,6 +79,16 @@ public class TestResolvingIOResolving {
private static Object[][] dataForResolvingTests() {
// The mnemonics are the same as {@link TestValidatingIO#testSchemas}
return new Object[][] {
+ // Projection
+ { "{\"type\":\"record\",\"name\":\"r\",\"fields\":["
+ + "{\"name\":\"f1\", \"type\":\"string\"},"
+ + "{\"name\":\"f2\", \"type\":\"string\"},"
+ + "{\"name\":\"f3\", \"type\":\"int\"}]}", "S10S10IS10S10I",
+ new Object[] { "s1", "s2", 100, "t1", "t2", 200 },
+ "{\"type\":\"record\",\"name\":\"r\",\"fields\":["
+ + "{\"name\":\"f1\", \"type\":\"string\" },"
+ + "{\"name\":\"f2\", \"type\":\"string\"}]}", "RS10S10RS10S10",
+ new Object[] { "s1", "s2", "t1", "t2" } },
// Reordered fields
{ "{\"type\":\"record\",\"name\":\"r\",\"fields\":["
+ "{\"name\":\"f1\", \"type\":\"int\"},"