You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2010/06/04 01:45:55 UTC
svn commit: r951211 - in /avro/branches/branch-1.3: ./
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: cutting
Date: Thu Jun 3 23:45:54 2010
New Revision: 951211
URL: http://svn.apache.org/viewvc?rev=951211&view=rev
Log:
Merge r935526 from trunk to 1.3 branch. Fixes: AVRO-517.
Modified:
avro/branches/branch-1.3/ (props changed)
avro/branches/branch-1.3/CHANGES.txt
avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java
avro/branches/branch-1.3/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java
Propchange: avro/branches/branch-1.3/
------------------------------------------------------------------------------
svn:mergeinfo = /hadoop/avro/trunk:935526
Modified: avro/branches/branch-1.3/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.3/CHANGES.txt?rev=951211&r1=951210&r2=951211&view=diff
==============================================================================
--- avro/branches/branch-1.3/CHANGES.txt (original)
+++ avro/branches/branch-1.3/CHANGES.txt Thu Jun 3 23:45:54 2010
@@ -18,6 +18,8 @@ Avro 1.3.3 (Unreleased)
AVRO-548. Python client should handle CLIENT handshake match status
correctly. (hammer)
+ AVRO-517. Resolving Decoder fails in some cases. (thiru)
+
Avro 1.3.2 (31 March 2010)
IMPROVEMENTS
Modified: avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java?rev=951211&r1=951210&r2=951211&view=diff
==============================================================================
--- avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java (original)
+++ avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/generic/GenericDatumReader.java Thu Jun 3 23:45:54 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: avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java?rev=951211&r1=951210&r2=951211&view=diff
==============================================================================
--- avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java (original)
+++ avro/branches/branch-1.3/lang/java/src/java/org/apache/avro/io/ResolvingDecoder.java Thu Jun 3 23:45:54 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: avro/branches/branch-1.3/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.3/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java?rev=951211&r1=951210&r2=951211&view=diff
==============================================================================
--- avro/branches/branch-1.3/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java (original)
+++ avro/branches/branch-1.3/lang/java/src/test/java/org/apache/avro/io/TestResolvingIOResolving.java Thu Jun 3 23:45:54 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\"},"