Return-Path:
X-Original-To: apmail-avro-commits-archive@www.apache.org
Delivered-To: apmail-avro-commits-archive@www.apache.org
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
by minotaur.apache.org (Postfix) with SMTP id 0171E1CCB
for ;
Wed, 20 Apr 2011 20:01:23 +0000 (UTC)
Received: (qmail 32893 invoked by uid 500); 20 Apr 2011 20:01:22 -0000
Delivered-To: apmail-avro-commits-archive@avro.apache.org
Received: (qmail 32872 invoked by uid 500); 20 Apr 2011 20:01:22 -0000
Mailing-List: contact commits-help@avro.apache.org; run by ezmlm
Precedence: bulk
List-Help:
List-Unsubscribe:
List-Post:
List-Id:
Reply-To: dev@avro.apache.org
Delivered-To: mailing list commits@avro.apache.org
Received: (qmail 32865 invoked by uid 99); 20 Apr 2011 20:01:22 -0000
Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230)
by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 20 Apr 2011 20:01:22 +0000
X-ASF-Spam-Status: No, hits=-2000.0 required=5.0
tests=ALL_TRUSTED
X-Spam-Check-By: apache.org
Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4)
by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 20 Apr 2011 20:01:16 +0000
Received: by eris.apache.org (Postfix, from userid 65534)
id A68DF2388A3C; Wed, 20 Apr 2011 20:00:54 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: svn commit: r1095495 - in /avro/branches/branch-1.5: ./
doc/src/content/xdocs/ lang/java/avro/src/main/java/org/apache/avro/file/
lang/java/avro/src/main/java/org/apache/avro/generic/
lang/java/ipc/src/test/java/org/apache/avro/ lang/java/mapred/src/ma...
Date: Wed, 20 Apr 2011 20:00:54 -0000
To: commits@avro.apache.org
From: cutting@apache.org
X-Mailer: svnmailer-1.0.8
Message-Id: <20110420200054.A68DF2388A3C@eris.apache.org>
X-Virus-Checked: Checked by ClamAV on apache.org
Author: cutting
Date: Wed Apr 20 20:00:53 2011
New Revision: 1095495
URL: http://svn.apache.org/viewvc?rev=1095495&view=rev
Log:
Merge changes 1094812, 1095206, 1095207, 1095208 and 1095493 from trunk to 1.5 branch. Fixes: AVRO-802, AVRO-799, AVRO-798, and AVRO-763.
Added:
avro/branches/branch-1.5/lang/java/tools/src/test/java/org/apache/avro/tool/TestTextFileTools.java
- copied unchanged from r1095207, avro/trunk/lang/java/tools/src/test/java/org/apache/avro/tool/TestTextFileTools.java
Modified:
avro/branches/branch-1.5/ (props changed)
avro/branches/branch-1.5/CHANGES.txt
avro/branches/branch-1.5/doc/src/content/xdocs/spec.xml
avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/SnappyCodec.java
avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java
avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
avro/branches/branch-1.5/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroMapper.java
avro/branches/branch-1.5/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroReducer.java
avro/branches/branch-1.5/lang/java/mapred/src/main/java/org/apache/avro/mapred/HadoopMapper.java
avro/branches/branch-1.5/lang/java/mapred/src/main/java/org/apache/avro/mapred/HadoopReducerBase.java
avro/branches/branch-1.5/lang/java/mapred/src/main/java/org/apache/avro/mapred/package.html
avro/branches/branch-1.5/lang/java/mapred/src/test/java/org/apache/avro/mapred/TestSequenceFileReader.java
avro/branches/branch-1.5/lang/java/mapred/src/test/java/org/apache/avro/mapred/TestWeather.java
avro/branches/branch-1.5/lang/java/tools/src/main/java/org/apache/avro/tool/FromTextTool.java
avro/branches/branch-1.5/lang/java/tools/src/main/java/org/apache/avro/tool/ToTextTool.java
Propchange: avro/branches/branch-1.5/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr 20 20:00:53 2011
@@ -1 +1 @@
-/avro/trunk:1075938,1075993,1078917,1079055,1079060,1079063,1083246,1085921,1086727,1086730,1086866,1087076,1087129,1087136,1087439-1087440,1087463,1087472,1087792,1089128,1089131,1089550
+/avro/trunk:1075938,1075993,1078917,1079055,1079060,1079063,1083246,1085921,1086727,1086730,1086866,1087076,1087129,1087136,1087439-1087440,1087463,1087472,1087792,1089128,1089131,1089550,1094812,1095206-1095208,1095493
Modified: avro/branches/branch-1.5/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.5/CHANGES.txt?rev=1095495&r1=1095494&r2=1095495&view=diff
==============================================================================
--- avro/branches/branch-1.5/CHANGES.txt (original)
+++ avro/branches/branch-1.5/CHANGES.txt Wed Apr 20 20:00:53 2011
@@ -30,7 +30,20 @@ Avro 1.5.1 (unreleased)
AVRO-794. Makefile.am is no longer required in C++. (thiru)
- AVRO-795. C++ Datafile reader makes it hard to build adaptive clients. (thiru)
+ AVRO-795. C++ Datafile reader makes it hard to build adaptive
+ clients. (thiru)
+
+ AVRO-802. Java: Add documentation for non-Avro input, map-only
+ jobs. (cutting)
+
+ AVRO-799. Java: Add support for --codec parameter to the
+ 'fromtext' command. Also made some performance improvements, bug
+ fixes and added tests for this command. (cutting)
+
+ AVRO-798. Add checksum to Snappy compressed blocks. (cutting)
+
+ AVRO-763. Java MapReduce API: add support for configure() and
+ close() methods to mappers and reducers. (Marshall Pierce via cutting)
BUG FIXES
@@ -39,6 +52,9 @@ Avro 1.5.1 (unreleased)
AVRO-780. Java: Fix a NullPointerException with reflect data when
a union contains an array and null. (cutting)
+ AVRO-790. Java: GenericDatumReader can fail when reusing objects with unions
+ containing 'bytes' fields. (scottcarey)
+
Avro 1.5.0 (10 March 2011)
INCOMPATIBLE CHANGES
Modified: avro/branches/branch-1.5/doc/src/content/xdocs/spec.xml
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.5/doc/src/content/xdocs/spec.xml?rev=1095495&r1=1095494&r2=1095495&view=diff
==============================================================================
--- avro/branches/branch-1.5/doc/src/content/xdocs/spec.xml (original)
+++ avro/branches/branch-1.5/doc/src/content/xdocs/spec.xml Wed Apr 20 20:00:53 2011
@@ -701,7 +701,8 @@
snappy
The "snappy" codec uses
Google's Snappy
- compression library.
+ compression library. Each compressed block is followed
+ by its 4-byte, big-endian CRC32 checksum.
Modified: avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/SnappyCodec.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/SnappyCodec.java?rev=1095495&r1=1095494&r2=1095495&view=diff
==============================================================================
--- avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/SnappyCodec.java (original)
+++ avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/file/SnappyCodec.java Wed Apr 20 20:00:53 2011
@@ -19,19 +19,19 @@ package org.apache.avro.file;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.util.zip.CRC32;
import org.xerial.snappy.Snappy;
import org.xerial.snappy.SnappyException;
/** * Implements Snappy compression and decompression. */
class SnappyCodec extends Codec {
-
- private static final SnappyCodec INSTANCE = new SnappyCodec();
+ private CRC32 crc32 = new CRC32();
static class Option extends CodecFactory {
@Override
protected Codec createInstance() {
- return INSTANCE;
+ return new SnappyCodec();
}
}
@@ -43,10 +43,15 @@ class SnappyCodec extends Codec {
ByteBuffer compress(ByteBuffer in) throws IOException {
try {
ByteBuffer out =
- ByteBuffer.allocate(Snappy.maxCompressedLength(in.remaining()));
+ ByteBuffer.allocate(Snappy.maxCompressedLength(in.remaining())+4);
int size = Snappy.compress(in.array(), in.position(), in.remaining(),
out.array(), 0);
- out.limit(size);
+ crc32.reset();
+ crc32.update(in.array(), in.position(), in.remaining());
+ out.putInt(size, (int)crc32.getValue());
+
+ out.limit(size+4);
+
return out;
} catch (SnappyException e) {
throw new IOException(e);
@@ -57,10 +62,16 @@ class SnappyCodec extends Codec {
ByteBuffer decompress(ByteBuffer in) throws IOException {
try {
ByteBuffer out = ByteBuffer.allocate
- (Snappy.uncompressedLength(in.array(), in.position(), in.remaining()));
- int size = Snappy.uncompress(in.array(), in.position(), in.remaining(),
+ (Snappy.uncompressedLength(in.array(),in.position(),in.remaining()-4));
+ int size = Snappy.uncompress(in.array(),in.position(),in.remaining()-4,
out.array(), 0);
out.limit(size);
+
+ crc32.reset();
+ crc32.update(out.array(), 0, size);
+ if (in.getInt(in.limit()-4) != (int)crc32.getValue())
+ throw new IOException("Checksum failure");
+
return out;
} catch (SnappyException e) {
throw new IOException(e);
Modified: avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java?rev=1095495&r1=1095494&r2=1095495&view=diff
==============================================================================
--- avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java (original)
+++ avro/branches/branch-1.5/lang/java/avro/src/main/java/org/apache/avro/generic/GenericDatumReader.java Wed Apr 20 20:00:53 2011
@@ -330,7 +330,7 @@ public class GenericDatumReader imple
* byte array representation. By default, this calls {@link
* Decoder#readBytes(ByteBuffer)}.*/
protected Object readBytes(Object old, Decoder in) throws IOException {
- return in.readBytes((ByteBuffer)old);
+ return in.readBytes(old instanceof ByteBuffer ? (ByteBuffer) old : null);
}
/** Called to read integers. Subclasses may override to use a different
Modified: avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java
URL: http://svn.apache.org/viewvc/avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java?rev=1095495&r1=1095494&r2=1095495&view=diff
==============================================================================
--- avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java (original)
+++ avro/branches/branch-1.5/lang/java/ipc/src/test/java/org/apache/avro/TestSchema.java Wed Apr 20 20:00:53 2011
@@ -45,7 +45,6 @@ import org.apache.avro.io.DatumWriter;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.Encoder;
import org.apache.avro.io.EncoderFactory;
-import org.apache.avro.io.JsonDecoder;
import org.apache.avro.compiler.specific.TestSpecificCompiler;
import org.apache.avro.util.Utf8;
@@ -79,7 +78,7 @@ public class TestSchema {
+ " \"name\": \"inner_union\" }\n" + " ]\n" + "}\n";
private static final int COUNT =
- Integer.parseInt(System.getProperty("test.count", "10"));
+ Integer.parseInt(System.getProperty("test.count", "30"));
@Test
public void testNull() throws Exception {
@@ -163,6 +162,18 @@ public class TestSchema {
check("{\"type\":\"map\", \"values\":\"long\"}", "{\"a\":1}", map);
checkParseError("{\"type\":\"map\"}"); // values required
}
+
+ @Test
+ public void testUnionMap() throws Exception {
+ String unionMapSchema = "{\"name\":\"foo\", \"type\":\"record\"," +
+ " \"fields\":[ {\"name\":\"mymap\", \"type\":" +
+ " [{\"type\":\"map\", \"values\":" +
+ " [\"int\",\"long\",\"float\",\"string\"]}," +
+ " \"null\"]" +
+ " }]" +
+ " }";
+ check(unionMapSchema, true);
+ }
@Test
public void testRecord() throws Exception {
@@ -558,6 +569,7 @@ public class TestSchema {
throws Exception {
Schema schema = Schema.parse(jsonSchema);
checkProp(schema);
+ Object reuse = null;
for (Object datum : new RandomData(schema, COUNT)) {
if (induce) {
@@ -570,7 +582,10 @@ public class TestSchema {
checkBinary(schema, datum,
new GenericDatumWriter