Return-Path: Delivered-To: apmail-hadoop-common-commits-archive@www.apache.org Received: (qmail 29007 invoked from network); 8 Mar 2011 04:35:50 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 8 Mar 2011 04:35:50 -0000 Received: (qmail 83526 invoked by uid 500); 8 Mar 2011 04:35:50 -0000 Delivered-To: apmail-hadoop-common-commits-archive@hadoop.apache.org Received: (qmail 83448 invoked by uid 500); 8 Mar 2011 04:35:49 -0000 Mailing-List: contact common-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: common-dev@hadoop.apache.org Delivered-To: mailing list common-commits@hadoop.apache.org Received: (qmail 83423 invoked by uid 99); 8 Mar 2011 04:35:48 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Mar 2011 04:35:48 +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; Tue, 08 Mar 2011 04:35:47 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 54EAB2388994; Tue, 8 Mar 2011 04:35:27 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1079095 - in /hadoop/common/branches/yahoo-merge: CHANGES.txt src/java/org/apache/hadoop/io/compress/CompressionCodecFactory.java src/test/core/org/apache/hadoop/io/compress/TestCodecFactory.java Date: Tue, 08 Mar 2011 04:35:27 -0000 To: common-commits@hadoop.apache.org From: omalley@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110308043527.54EAB2388994@eris.apache.org> Author: omalley Date: Tue Mar 8 04:35:26 2011 New Revision: 1079095 URL: http://svn.apache.org/viewvc?rev=1079095&view=rev Log: commit dbfb7adcc97e351d0ed72dd317e1e20ad419e09a Author: Hairong Kuang Date: Thu Oct 14 20:35:53 2010 +0000 HADOOP-6996. Allow CodecFactory to return a codec object given a codec' class name. Contributed by Hairong Kuang. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1022697 13f79535-47bb-0310-9956-ffa450edef68 Modified: hadoop/common/branches/yahoo-merge/CHANGES.txt hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/io/compress/CompressionCodecFactory.java hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/io/compress/TestCodecFactory.java Modified: hadoop/common/branches/yahoo-merge/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/CHANGES.txt?rev=1079095&r1=1079094&r2=1079095&view=diff ============================================================================== --- hadoop/common/branches/yahoo-merge/CHANGES.txt (original) +++ hadoop/common/branches/yahoo-merge/CHANGES.txt Tue Mar 8 04:35:26 2011 @@ -35,6 +35,9 @@ Trunk (unreleased changes) HADOOP-6889. Make RPC to have an option to timeout. (hairong) + HADOOP-6996. Allow CodecFactory to return a codec object given a codec' + class name. (hairong) + IMPROVEMENTS HADOOP-6644. util.Shell getGROUPS_FOR_USER_COMMAND method name Modified: hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/io/compress/CompressionCodecFactory.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/io/compress/CompressionCodecFactory.java?rev=1079095&r1=1079094&r2=1079095&view=diff ============================================================================== --- hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/io/compress/CompressionCodecFactory.java (original) +++ hadoop/common/branches/yahoo-merge/src/java/org/apache/hadoop/io/compress/CompressionCodecFactory.java Tue Mar 8 04:35:26 2011 @@ -44,9 +44,15 @@ public class CompressionCodecFactory { */ private SortedMap codecs = null; + /** + * A map from class names to the codecs + */ + private HashMap codecsByClassName = null; + private void addCodec(CompressionCodec codec) { String suffix = codec.getDefaultExtension(); codecs.put(new StringBuilder(suffix).reverse().toString(), codec); + codecsByClassName.put(codec.getClass().getCanonicalName(), codec); } /** @@ -135,6 +141,7 @@ public class CompressionCodecFactory { */ public CompressionCodecFactory(Configuration conf) { codecs = new TreeMap(); + codecsByClassName = new HashMap(); List> codecClasses = getCodecClasses(conf); if (codecClasses == null) { addCodec(new GzipCodec()); @@ -172,6 +179,18 @@ public class CompressionCodecFactory { } /** + * Find the relevant compression codec for the codec's canonical class name. + * @param classname the canonical class name of the codec + * @return the codec object + */ + public CompressionCodec getCodecByClassName(String classname) { + if (codecsByClassName == null) { + return null; + } + return codecsByClassName.get(classname); + } + + /** * Removes a suffix from a filename, if it has it. * @param filename the filename to strip * @param suffix the suffix to remove Modified: hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/io/compress/TestCodecFactory.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/io/compress/TestCodecFactory.java?rev=1079095&r1=1079094&r2=1079095&view=diff ============================================================================== --- hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/io/compress/TestCodecFactory.java (original) +++ hadoop/common/branches/yahoo-merge/src/test/core/org/apache/hadoop/io/compress/TestCodecFactory.java Tue Mar 8 04:35:26 2011 @@ -124,28 +124,60 @@ public class TestCodecFactory extends Te new CompressionCodecFactory(new Configuration()); CompressionCodec codec = factory.getCodec(new Path("/tmp/foo.bar")); assertEquals("default factory foo codec", null, codec); + codec = factory.getCodecByClassName(BarCodec.class.getCanonicalName()); + assertEquals("default factory foo codec", null, codec); + codec = factory.getCodec(new Path("/tmp/foo.gz")); checkCodec("default factory for .gz", GzipCodec.class, codec); + codec = factory.getCodecByClassName(GzipCodec.class.getCanonicalName()); + checkCodec("default factory for gzip codec", GzipCodec.class, codec); + codec = factory.getCodec(new Path("/tmp/foo.bz2")); checkCodec("default factory for .bz2", BZip2Codec.class, codec); + codec = factory.getCodecByClassName(BZip2Codec.class.getCanonicalName()); + checkCodec("default factory for bzip2 codec", BZip2Codec.class, codec); + factory = setClasses(new Class[0]); codec = factory.getCodec(new Path("/tmp/foo.bar")); assertEquals("empty codec bar codec", null, codec); + codec = factory.getCodecByClassName(BarCodec.class.getCanonicalName()); + assertEquals("empty codec bar codec", null, codec); + codec = factory.getCodec(new Path("/tmp/foo.gz")); assertEquals("empty codec gz codec", null, codec); + codec = factory.getCodecByClassName(GzipCodec.class.getCanonicalName()); + assertEquals("empty codec gz codec", null, codec); + codec = factory.getCodec(new Path("/tmp/foo.bz2")); - assertEquals("default factory for .bz2", null, codec); + assertEquals("empty factory for .bz2", null, codec); + codec = factory.getCodecByClassName(BZip2Codec.class.getCanonicalName()); + assertEquals("empty factory for bzip2 codec", null, codec); + factory = setClasses(new Class[]{BarCodec.class, FooCodec.class, FooBarCodec.class}); codec = factory.getCodec(new Path("/tmp/.foo.bar.gz")); assertEquals("full factory gz codec", null, codec); + codec = factory.getCodecByClassName(GzipCodec.class.getCanonicalName()); + assertEquals("full codec gz codec", null, codec); + codec = factory.getCodec(new Path("/tmp/foo.bz2")); - assertEquals("default factory for .bz2", null, codec); + assertEquals("full factory for .bz2", null, codec); + codec = factory.getCodecByClassName(BZip2Codec.class.getCanonicalName()); + assertEquals("full codec bzip2 codec", null, codec); + codec = factory.getCodec(new Path("/tmp/foo.bar")); checkCodec("full factory bar codec", BarCodec.class, codec); + codec = factory.getCodecByClassName(BarCodec.class.getCanonicalName()); + checkCodec("full factory bar codec", BarCodec.class, codec); + codec = factory.getCodec(new Path("/tmp/foo/baz.foo.bar")); checkCodec("full factory foo bar codec", FooBarCodec.class, codec); + codec = factory.getCodecByClassName(FooBarCodec.class.getCanonicalName()); + checkCodec("full factory foo bar codec", FooBarCodec.class, codec); + codec = factory.getCodec(new Path("/tmp/foo.foo")); checkCodec("full factory foo codec", FooCodec.class, codec); + codec = factory.getCodecByClassName(FooCodec.class.getCanonicalName()); + checkCodec("full factory foo codec", FooCodec.class, codec); } }