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 el...@apache.org on 2011/05/23 03:27:43 UTC
svn commit: r1126287 - in /hadoop/common/trunk: CHANGES.txt
src/java/org/apache/hadoop/io/MD5Hash.java
src/test/core/org/apache/hadoop/io/TestMD5Hash.java
Author: eli
Date: Mon May 23 01:27:43 2011
New Revision: 1126287
URL: http://svn.apache.org/viewvc?rev=1126287&view=rev
Log:
HADOOP-7318. MD5Hash factory should reset the digester it returns. Contributed by Todd Lipcon
Modified:
hadoop/common/trunk/CHANGES.txt
hadoop/common/trunk/src/java/org/apache/hadoop/io/MD5Hash.java
hadoop/common/trunk/src/test/core/org/apache/hadoop/io/TestMD5Hash.java
Modified: hadoop/common/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/CHANGES.txt?rev=1126287&r1=1126286&r2=1126287&view=diff
==============================================================================
--- hadoop/common/trunk/CHANGES.txt (original)
+++ hadoop/common/trunk/CHANGES.txt Mon May 23 01:27:43 2011
@@ -717,6 +717,9 @@ Release 0.22.0 - Unreleased
HADOOP-7305. Eclipse project classpath should include tools.jar from JDK.
(Niels Basjes via todd)
+ HADOOP-7318. MD5Hash factory should reset the digester it returns.
+ (todd via eli)
+
Release 0.21.1 - Unreleased
IMPROVEMENTS
Modified: hadoop/common/trunk/src/java/org/apache/hadoop/io/MD5Hash.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/src/java/org/apache/hadoop/io/MD5Hash.java?rev=1126287&r1=1126286&r2=1126287&view=diff
==============================================================================
--- hadoop/common/trunk/src/java/org/apache/hadoop/io/MD5Hash.java (original)
+++ hadoop/common/trunk/src/java/org/apache/hadoop/io/MD5Hash.java Mon May 23 01:27:43 2011
@@ -98,7 +98,9 @@ public class MD5Hash implements Writable
* Create a thread local MD5 digester
*/
public static MessageDigest getDigester() {
- return DIGESTER_FACTORY.get();
+ MessageDigest digester = DIGESTER_FACTORY.get();
+ digester.reset();
+ return digester;
}
/** Construct a hash value for the content from the InputStream. */
Modified: hadoop/common/trunk/src/test/core/org/apache/hadoop/io/TestMD5Hash.java
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/src/test/core/org/apache/hadoop/io/TestMD5Hash.java?rev=1126287&r1=1126286&r2=1126287&view=diff
==============================================================================
--- hadoop/common/trunk/src/test/core/org/apache/hadoop/io/TestMD5Hash.java (original)
+++ hadoop/common/trunk/src/test/core/org/apache/hadoop/io/TestMD5Hash.java Mon May 23 01:27:43 2011
@@ -20,6 +20,9 @@ package org.apache.hadoop.io;
import org.apache.hadoop.io.TestWritable;
import junit.framework.TestCase;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
import java.security.MessageDigest;
import java.util.Random;
@@ -109,7 +112,38 @@ public class TestMD5Hash extends TestCas
t2.start();
t1.join();
t2.join();
-
}
-
+
+ public void testFactoryReturnsClearedHashes() throws IOException {
+ // A stream that will throw an IOE after reading some bytes
+ ByteArrayInputStream failingStream = new ByteArrayInputStream(
+ "xxxx".getBytes()) {
+ @Override
+ public synchronized int read(byte[] b) throws IOException {
+ int ret = super.read(b);
+ if (ret <= 0) {
+ throw new IOException("Injected fault");
+ }
+ return ret;
+ }
+ };
+ final String TEST_STRING = "hello";
+
+ // Calculate the correct digest for the test string
+ MD5Hash expectedHash = MD5Hash.digest(TEST_STRING);
+
+ // Hashing again should give the same result
+ assertEquals(expectedHash, MD5Hash.digest(TEST_STRING));
+
+ // Try to hash a stream which will fail halfway through
+ try {
+ MD5Hash.digest(failingStream);
+ fail("didnt throw!");
+ } catch (Exception e) {
+ // expected
+ }
+
+ // Make sure we get the same result
+ assertEquals(expectedHash, MD5Hash.digest(TEST_STRING));
+ }
}