You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by ra...@apache.org on 2009/07/10 23:17:29 UTC
svn commit: r793111 - in /hadoop/hdfs/trunk: CHANGES.txt
src/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java
Author: rangadi
Date: Fri Jul 10 21:17:29 2009
New Revision: 793111
URL: http://svn.apache.org/viewvc?rev=793111&view=rev
Log:
HDFS-415. BlockReceiver hangs in case of certain runtime exceptions. (Konstantin Boudnik via rangadi)
Modified:
hadoop/hdfs/trunk/CHANGES.txt
hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java
Modified: hadoop/hdfs/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/CHANGES.txt?rev=793111&r1=793110&r2=793111&view=diff
==============================================================================
--- hadoop/hdfs/trunk/CHANGES.txt (original)
+++ hadoop/hdfs/trunk/CHANGES.txt Fri Jul 10 21:17:29 2009
@@ -62,6 +62,9 @@
HDFS-438. Check for NULL before invoking GenericArgumentParser in
DataNode. (Raghu Angadi)
+ HDFS-415. BlockReceiver hangs in case of certain runtime exceptions.
+ (Konstantin Boudnik via rangadi)
+
Release 0.20.1 - Unreleased
IMPROVEMENTS
Modified: hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java?rev=793111&r1=793110&r2=793111&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java (original)
+++ hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java Fri Jul 10 21:17:29 2009
@@ -502,6 +502,7 @@
String mirrAddr, BlockTransferThrottler throttlerArg,
int numTargets) throws IOException {
+ boolean responderClosed = false;
mirrorOut = mirrOut;
mirrorAddr = mirrAddr;
throttler = throttlerArg;
@@ -535,8 +536,10 @@
// wait for all outstanding packet responses. And then
// indicate responder to gracefully shutdown.
+ // Mark that responder has been closed for future processing
if (responder != null) {
((PacketResponder)responder.getRunnable()).close();
+ responderClosed = true;
}
// if this write is for a replication request (and not
@@ -555,13 +558,15 @@
} catch (IOException ioe) {
LOG.info("Exception in receiveBlock for block " + block +
" " + ioe);
- IOUtils.closeStream(this);
- if (responder != null) {
- responder.interrupt();
- }
- cleanupBlock();
throw ioe;
} finally {
+ if (!responderClosed) { // Abnormal termination of the flow above
+ IOUtils.closeStream(this);
+ if (responder != null) {
+ responder.interrupt();
+ }
+ cleanupBlock();
+ }
if (responder != null) {
try {
responder.join();