You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by om...@apache.org on 2011/05/03 01:16:08 UTC
svn commit: r1098850 - in /hadoop/common/branches/branch-0.20-security: ./
src/core/org/apache/hadoop/fs/ src/core/org/apache/hadoop/io/compress/
src/mapred/ src/test/org/apache/hadoop/fs/
src/test/org/apache/hadoop/io/compress/ src/tools/org/apache/ha...
Author: omalley
Date: Mon May 2 23:16:07 2011
New Revision: 1098850
URL: http://svn.apache.org/viewvc?rev=1098850&view=rev
Log:
HADOOP-6315. Avoid incorrect use of BuiltInflater/BuiltInDeflater in
GzipCodec. (Aaron Kimball via cdouglas)
Modified:
hadoop/common/branches/branch-0.20-security/ (props changed)
hadoop/common/branches/branch-0.20-security/CHANGES.txt (contents, props changed)
hadoop/common/branches/branch-0.20-security/src/core/org/apache/hadoop/fs/HarFileSystem.java (props changed)
hadoop/common/branches/branch-0.20-security/src/core/org/apache/hadoop/io/compress/GzipCodec.java
hadoop/common/branches/branch-0.20-security/src/mapred/ (props changed)
hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/fs/TestHarFileSystem.java (props changed)
hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/io/compress/TestCodec.java
hadoop/common/branches/branch-0.20-security/src/tools/org/apache/hadoop/tools/HadoopArchives.java (props changed)
Propchange: hadoop/common/branches/branch-0.20-security/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon May 2 23:16:07 2011
@@ -1,4 +1,4 @@
-/hadoop/common/branches/branch-0.20:826138,826568,829987,831184,833001,880632,909245,909723,960946
-/hadoop/common/branches/branch-0.20-security-203:1096071,1097011,1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832
+/hadoop/common/branches/branch-0.20:826138,826568,829987,831184,833001,880632,898713,909245,909723,960946
+/hadoop/common/branches/branch-0.20-security-203:1096071,1097011,1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832,1098839
/hadoop/core/branches/branch-0.19:713112
/hadoop/core/trunk:727001,727117,727191,727212,727217,727228,727255,727869,728187,729052,729987,732385,732572,732613,732777,732838,732869,733887,734870,734916,736426,738328,738697,740077,740157,741703,741762,743745,743816,743892,744894,745180,746010,746206,746227,746233,746274,746338,746902-746903,746925,746944,746968,746970,747279,747289,747802,748084,748090,748783,749262,749318,749863,750533,752073,752609,752834,752836,752913,752932,753112-753113,753346,754645,754847,754927,755035,755226,755348,755370,755418,755426,755790,755905,755938,755960,755986,755998,756352,757448,757624,757849,758156,758180,759398,759932,760502,760783,761046,761482,761632,762216,762879,763107,763502,764967,765016,765809,765951,771607,771661,772844,772876,772884,772920,773889,776638,778962,778966,779893,781720,784661,785046,785569
Modified: hadoop/common/branches/branch-0.20-security/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/CHANGES.txt?rev=1098850&r1=1098849&r2=1098850&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security/CHANGES.txt (original)
+++ hadoop/common/branches/branch-0.20-security/CHANGES.txt Mon May 2 23:16:07 2011
@@ -1780,6 +1780,9 @@ Release 0.20.2 - Unreleased
MAPREDUCE-1163. Remove unused, hard-coded paths from libhdfs. (Allen
Wittenauer via cdouglas)
+ HADOOP-6315. Avoid incorrect use of BuiltInflater/BuiltInDeflater in
+ GzipCodec. (Aaron Kimball via cdouglas)
+
Release 0.20.1 - 2009-09-01
INCOMPATIBLE CHANGES
Propchange: hadoop/common/branches/branch-0.20-security/CHANGES.txt
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon May 2 23:16:07 2011
@@ -1,5 +1,5 @@
-/hadoop/common/branches/branch-0.20/CHANGES.txt:826138,826568,829987,831184,833001,880632,909245,909723,960946
-/hadoop/common/branches/branch-0.20-security-203/CHANGES.txt:1096071,1097011,1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832
+/hadoop/common/branches/branch-0.20/CHANGES.txt:826138,826568,829987,831184,833001,880632,898713,909245,909723,960946
+/hadoop/common/branches/branch-0.20-security-203/CHANGES.txt:1096071,1097011,1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832,1098839
/hadoop/core/branches/branch-0.18/CHANGES.txt:727226
/hadoop/core/branches/branch-0.19/CHANGES.txt:713112
/hadoop/core/trunk/CHANGES.txt:727001,727117,727191,727212,727228,727255,727869,728187,729052,729987,732385,732572,732613,732777,732838,732869,733887,734870,734916,735082,736426,738602,738697,739416,740077,740157,741703,741762,743296,743745,743816,743892,744894,745180,745268,746010,746193,746206,746227,746233,746274,746902-746903,746925,746944,746968,746970,747279,747289,747802,748084,748090,748783,749262,749318,749863,750533,752073,752514,752555,752590,752609,752834,752836,752913,752932,753112-753113,753346,754645,754847,754927,755035,755226,755348,755370,755418,755426,755790,755905,755938,755986,755998,756352,757448,757624,757849,758156,758180,759398,759932,760502,760783,761046,761482,761632,762216,762879,763107,763502,764967,765016,765809,765951,771607,772844,772876,772884,772920,773889,776638,778962,778966,779893,781720,784661,785046,785569
Propchange: hadoop/common/branches/branch-0.20-security/src/core/org/apache/hadoop/fs/HarFileSystem.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon May 2 23:16:07 2011
@@ -1,4 +1,4 @@
-/hadoop/common/branches/branch-0.20-security-203/src/core/org/apache/hadoop/fs/HarFileSystem.java:1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832
+/hadoop/common/branches/branch-0.20-security-203/src/core/org/apache/hadoop/fs/HarFileSystem.java:1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832,1098839
/hadoop/common/trunk/src/core/org/apache/hadoop/fs/HarFileSystem.java:910709
/hadoop/common/trunk/src/java/org/apache/hadoop/fs/HarFileSystem.java:979485
/hadoop/core/branches/branch-0.19/src/core/org/apache/hadoop/fs/HarFileSystem.java:713112
Modified: hadoop/common/branches/branch-0.20-security/src/core/org/apache/hadoop/io/compress/GzipCodec.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/src/core/org/apache/hadoop/io/compress/GzipCodec.java?rev=1098850&r1=1098849&r2=1098850&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security/src/core/org/apache/hadoop/io/compress/GzipCodec.java (original)
+++ hadoop/common/branches/branch-0.20-security/src/core/org/apache/hadoop/io/compress/GzipCodec.java Mon May 2 23:16:07 2011
@@ -141,7 +141,7 @@ public class GzipCodec extends DefaultCo
public Class<? extends Decompressor> getDecompressorType() {
return ZlibFactory.isNativeZlibLoaded(conf)
? GzipZlibDecompressor.class
- : BuiltInGzipDecompressor.class;
+ : null;
}
public String getDefaultExtension() {
Propchange: hadoop/common/branches/branch-0.20-security/src/mapred/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon May 2 23:16:07 2011
@@ -1,5 +1,5 @@
-/hadoop/common/branches/branch-0.20/src/mapred:826138,826568,829987,831184,833001,880632,909245,909723,960946
-/hadoop/common/branches/branch-0.20-security-203/src/mapred:1096071,1097011,1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832
+/hadoop/common/branches/branch-0.20/src/mapred:826138,826568,829987,831184,833001,880632,898713,909245,909723,960946
+/hadoop/common/branches/branch-0.20-security-203/src/mapred:1096071,1097011,1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832,1098839
/hadoop/core/branches/branch-0.19/src/mapred:713112
/hadoop/core/trunk/src/mapred:727001,727117,727191,727212,727217,727228,727255,727869,728187,729052,729987,732385,732572,732613,732777,732838,732869,733887,734870,734916,736426,738328,738697,740077,740157,741703,741762,743745,743816,743892,744894,745180,746010,746206,746227,746233,746274,746338,746902-746903,746925,746944,746968,746970,747279,747289,747802,748084,748090,748783,749262,749318,749863,750533,752073,752609,752834,752836,752913,752932,753112-753113,753346,754645,754847,754927,755035,755226,755348,755370,755418,755426,755790,755905,755938,755960,755986,755998,756352,757448,757624,757849,758156,758180,759398,759932,760502,760783,761046,761482,761632,762216,762879,763107,763502,764967,765016,765809,765951,771607,771661,772844,772876,772884,772920,773889,776638,778962,778966,779893,781720,784661,785046,785569
/hadoop/mapreduce/trunk/src/java:808650
Propchange: hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/fs/TestHarFileSystem.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon May 2 23:16:07 2011
@@ -1,4 +1,4 @@
-/hadoop/common/branches/branch-0.20-security-203/src/test/org/apache/hadoop/fs/TestHarFileSystem.java:1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832
+/hadoop/common/branches/branch-0.20-security-203/src/test/org/apache/hadoop/fs/TestHarFileSystem.java:1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832,1098839
/hadoop/common/trunk/src/test/core/org/apache/hadoop/fs/TestHarFileSystem.java:979485
/hadoop/common/trunk/src/test/org/apache/hadoop/fs/TestHarFileSystem.java:910709
/hadoop/core/branches/branch-0.19/src/test/org/apache/hadoop/fs/TestHarFileSystem.java:713112
Modified: hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/io/compress/TestCodec.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/io/compress/TestCodec.java?rev=1098850&r1=1098849&r2=1098850&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/io/compress/TestCodec.java (original)
+++ hadoop/common/branches/branch-0.20-security/src/test/org/apache/hadoop/io/compress/TestCodec.java Mon May 2 23:16:07 2011
@@ -19,13 +19,22 @@ package org.apache.hadoop.io.compress;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Random;
+import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import junit.framework.TestCase;
@@ -45,8 +54,11 @@ import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.util.ReflectionUtils;
import org.apache.hadoop.io.SequenceFile.CompressionType;
+import org.apache.hadoop.io.compress.CompressorStream;
import org.apache.hadoop.io.compress.CompressionOutputStream;
import org.apache.hadoop.io.compress.zlib.BuiltInGzipDecompressor;
+import org.apache.hadoop.io.compress.zlib.BuiltInZlibDeflater;
+import org.apache.hadoop.io.compress.zlib.BuiltInZlibInflater;
import org.apache.hadoop.io.compress.zlib.ZlibCompressor.CompressionLevel;
import org.apache.hadoop.io.compress.zlib.ZlibCompressor.CompressionStrategy;
import org.apache.hadoop.io.compress.zlib.ZlibFactory;
@@ -447,4 +459,151 @@ public class TestCodec extends TestCase
super(name);
}
+ public void testCodecPoolAndGzipDecompressor() {
+ // BuiltInZlibInflater should not be used as the GzipCodec decompressor.
+ // Assert that this is the case.
+
+ // Don't use native libs for this test.
+ Configuration conf = new Configuration();
+ conf.setBoolean("hadoop.native.lib", false);
+ assertFalse("ZlibFactory is using native libs against request",
+ ZlibFactory.isNativeZlibLoaded(conf));
+
+ // This should give us a BuiltInZlibInflater.
+ Decompressor zlibDecompressor = ZlibFactory.getZlibDecompressor(conf);
+ assertNotNull("zlibDecompressor is null!", zlibDecompressor);
+ assertTrue("ZlibFactory returned unexpected inflator",
+ zlibDecompressor instanceof BuiltInZlibInflater);
+
+ // Asking for a decompressor directly from GzipCodec should return null;
+ // its createOutputStream() just wraps the existing stream in a
+ // java.util.zip.GZIPOutputStream.
+ CompressionCodecFactory ccf = new CompressionCodecFactory(conf);
+ CompressionCodec codec = ccf.getCodec(new Path("foo.gz"));
+ assertTrue("Codec for .gz file is not GzipCodec", codec instanceof GzipCodec);
+ Decompressor codecDecompressor = codec.createDecompressor();
+ if (null != codecDecompressor) {
+ fail("Got non-null codecDecompressor: " + codecDecompressor);
+ }
+
+ // Asking the CodecPool for a decompressor for GzipCodec
+ // should return null as well.
+ Decompressor poolDecompressor = CodecPool.getDecompressor(codec);
+ if (null != poolDecompressor) {
+ fail("Got non-null poolDecompressor: " + poolDecompressor);
+ }
+
+ // If we then ensure that the pool is populated...
+ CodecPool.returnDecompressor(zlibDecompressor);
+
+ // Asking the pool another time should still not bind this to GzipCodec.
+ poolDecompressor = CodecPool.getDecompressor(codec);
+ if (null != poolDecompressor) {
+ fail("Second time, got non-null poolDecompressor: "
+ + poolDecompressor);
+ }
+ }
+
+ public void testGzipCodecRead() throws IOException {
+ // Create a gzipped file and try to read it back, using a decompressor
+ // from the CodecPool.
+
+ // Don't use native libs for this test.
+ Configuration conf = new Configuration();
+ conf.setBoolean("hadoop.native.lib", false);
+ assertFalse("ZlibFactory is using native libs against request",
+ ZlibFactory.isNativeZlibLoaded(conf));
+
+ // Ensure that the CodecPool has a BuiltInZlibInflater in it.
+ Decompressor zlibDecompressor = ZlibFactory.getZlibDecompressor(conf);
+ assertNotNull("zlibDecompressor is null!", zlibDecompressor);
+ assertTrue("ZlibFactory returned unexpected inflator",
+ zlibDecompressor instanceof BuiltInZlibInflater);
+ CodecPool.returnDecompressor(zlibDecompressor);
+
+ // Now create a GZip text file.
+ String tmpDir = System.getProperty("test.build.data", "/tmp/");
+ Path f = new Path(new Path(tmpDir), "testGzipCodecRead.txt.gz");
+ BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
+ new GZIPOutputStream(new FileOutputStream(f.toString()))));
+ final String msg = "This is the message in the file!";
+ bw.write(msg);
+ bw.close();
+
+ // Now read it back, using the CodecPool to establish the
+ // decompressor to use.
+ CompressionCodecFactory ccf = new CompressionCodecFactory(conf);
+ CompressionCodec codec = ccf.getCodec(f);
+ Decompressor decompressor = CodecPool.getDecompressor(codec);
+ FileSystem fs = FileSystem.getLocal(conf);
+ InputStream is = fs.open(f);
+ is = codec.createInputStream(is, decompressor);
+ BufferedReader br = new BufferedReader(new InputStreamReader(is));
+ String line = br.readLine();
+ assertEquals("Didn't get the same message back!", msg, line);
+ br.close();
+ }
+
+ private void verifyGzipFile(String filename, String msg) throws IOException {
+ BufferedReader r = new BufferedReader(new InputStreamReader(
+ new GZIPInputStream(new FileInputStream(filename))));
+ try {
+ String line = r.readLine();
+ assertEquals("Got invalid line back from " + filename, msg, line);
+ } finally {
+ r.close();
+ new File(filename).delete();
+ }
+ }
+
+ public void testGzipCodecWrite() throws IOException {
+ // Create a gzipped file using a compressor from the CodecPool,
+ // and try to read it back via the regular GZIPInputStream.
+
+ // Don't use native libs for this test.
+ Configuration conf = new Configuration();
+ conf.setBoolean("hadoop.native.lib", false);
+ assertFalse("ZlibFactory is using native libs against request",
+ ZlibFactory.isNativeZlibLoaded(conf));
+
+ // Ensure that the CodecPool has a BuiltInZlibDeflater in it.
+ Compressor zlibCompressor = ZlibFactory.getZlibCompressor(conf);
+ assertNotNull("zlibCompressor is null!", zlibCompressor);
+ assertTrue("ZlibFactory returned unexpected deflator",
+ zlibCompressor instanceof BuiltInZlibDeflater);
+ CodecPool.returnCompressor(zlibCompressor);
+
+ // Create a GZIP text file via the Compressor interface.
+ CompressionCodecFactory ccf = new CompressionCodecFactory(conf);
+ CompressionCodec codec = ccf.getCodec(new Path("foo.gz"));
+ assertTrue("Codec for .gz file is not GzipCodec", codec instanceof GzipCodec);
+
+ final String msg = "This is the message we are going to compress.";
+ final String tmpDir = System.getProperty("test.build.data", "/tmp/");
+ final String fileName = new Path(new Path(tmpDir),
+ "testGzipCodecWrite.txt.gz").toString();
+
+ BufferedWriter w = null;
+ Compressor gzipCompressor = CodecPool.getCompressor(codec);
+ if (null != gzipCompressor) {
+ // If it gives us back a Compressor, we should be able to use this
+ // to write files we can then read back with Java's gzip tools.
+ OutputStream os = new CompressorStream(new FileOutputStream(fileName),
+ gzipCompressor);
+ w = new BufferedWriter(new OutputStreamWriter(os));
+ w.write(msg);
+ w.close();
+ CodecPool.returnCompressor(gzipCompressor);
+
+ verifyGzipFile(fileName, msg);
+ }
+
+ // Create a gzip text file via codec.getOutputStream().
+ w = new BufferedWriter(new OutputStreamWriter(
+ codec.createOutputStream(new FileOutputStream(fileName))));
+ w.write(msg);
+ w.close();
+
+ verifyGzipFile(fileName, msg);
+ }
}
Propchange: hadoop/common/branches/branch-0.20-security/src/tools/org/apache/hadoop/tools/HadoopArchives.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon May 2 23:16:07 2011
@@ -1,4 +1,4 @@
-/hadoop/common/branches/branch-0.20-security-203/src/tools/org/apache/hadoop/tools/HadoopArchives.java:1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832
+/hadoop/common/branches/branch-0.20-security-203/src/tools/org/apache/hadoop/tools/HadoopArchives.java:1097249,1097269,1097281,1097966,1098816,1098819,1098823,1098827,1098832,1098839
/hadoop/common/trunk/src/tools/org/apache/hadoop/tools/HadoopArchives.java:910709
/hadoop/core/branches/branch-0.19/src/tools/org/apache/hadoop/tools/HadoopArchives.java:713112
/hadoop/core/trunk/src/tools/org/apache/hadoop/tools/HadoopArchives.java:727001,727117,727191,727212,727217,727228,727255,727869,728187,729052,729987,732385,732572,732613,732777,732838,732869,733887,734870,734916,736426,738328,738697,740077,740157,741703,741762,743745,743816,743892,744894,745180,746010,746206,746227,746233,746274,746338,746902-746903,746925,746944,746968,746970,747279,747289,747802,748084,748090,748783,749262,749318,749863,750533,752073,752609,752834,752836,752913,752932,753112-753113,753346,754645,754847,754927,755035,755226,755348,755370,755418,755426,755790,755905,755938,755960,755986,755998,756352,757448,757624,757849,758156,758180,759398,759932,760502,760783,761046,761482,761632,762216,762879,763107,763502,764967,765016,765809,765951,771607,771661,772844,772876,772884,772920,773889,776638,778962,778966,779893,781720,784661,785046,785569