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).