Author: hairong
Date: Wed Sep 23 22:34:31 2009
New Revision: 818294

URL: http://svn.apache.org/viewvc?rev=818294&view=rev
Log:
HDFS-637. DataNode sends a Success ack when block write fails. Contributed by 
Hairong Kuang.

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=818294&r1=818293&r2=818294&view=diff
==============================================================================
--- hadoop/hdfs/trunk/CHANGES.txt (original)
+++ hadoop/hdfs/trunk/CHANGES.txt Wed Sep 23 22:34:31 2009
@@ -13,6 +13,7 @@
   BUG FIXES
   HDFS-640. Fixed TestHDFSFileContextMainOperations.java build failure. 
(suresh)
 
+  HDFS-637. DataNode sends a Success ack when block write fails. (hairong)
 
 Release 0.21.0 - Unreleased
 

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=818294&r1=818293&r2=818294&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
 Wed Sep 23 22:34:31 2009
@@ -870,6 +870,7 @@
       final long startTime = ClientTraceLog.isInfoEnabled() ? 
System.nanoTime() : 0;
       while (running && datanode.shouldRun && !lastPacketInBlock) {
 
+        boolean isInterrupted = false;
         try {
             DataTransferProtocol.Status op = SUCCESS;
             boolean didRead = false;
@@ -897,7 +898,12 @@
                                 " for block " + block +
                                 " waiting for local datanode to finish 
write.");
                     }
-                    wait();
+                    try {
+                      wait();
+                    } catch (InterruptedException e) {
+                      isInterrupted = true;
+                      throw e;
+                    }
                   }
                   pkt = ackQueue.removeFirst();
                   expected = pkt.seqno;
@@ -920,7 +926,7 @@
               }
             }
 
-            if (Thread.interrupted()) {
+            if (Thread.interrupted() || isInterrupted) {
               /* The receiver thread cancelled this thread. 
                * We could also check any other status updates from the 
                * receiver thread (e.g. if it is ok to write to replyOut). 


Reply via email to