Просмотр исходного кода

HDFS-2637. The rpc timeout for block recovery is too low. (eli)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1@1211577 13f79535-47bb-0310-9956-ffa450edef68
Eli Collins 13 лет назад
Родитель
Сommit
60d0166047
2 измененных файлов с 7 добавлено и 1 удалено
  1. 2 0
      CHANGES.txt
  2. 5 1
      src/hdfs/org/apache/hadoop/hdfs/DFSClient.java

+ 2 - 0
CHANGES.txt

@@ -58,6 +58,8 @@ Release 1.1.0 - unreleased
     HADOOP-7879. DistributedFileSystem#createNonRecursive should also
     incrementWriteOps statistics. (Jon Hsieh via todd)
 
+    HDFS-2637. The rpc timeout for block recovery is too low. (eli)
+
   IMPROVEMENTS
 
     MAPREDUCE-3008. [Gridmix] Improve cumulative CPU usage emulation for 

+ 5 - 1
src/hdfs/org/apache/hadoop/hdfs/DFSClient.java

@@ -3114,7 +3114,11 @@ public class DFSClient implements FSConstants, java.io.Closeable {
         try {
           // Pick the "least" datanode as the primary datanode to avoid deadlock.
           primaryNode = Collections.min(Arrays.asList(newnodes));
-          primary = createClientDatanodeProtocolProxy(primaryNode, conf, block, accessToken, socketTimeout);
+          // Set the timeout to reflect that recovery requires at most two rpcs
+          // to each DN and two rpcs to the NN.
+          int recoveryTimeout = (newnodes.length * 2 + 2) * socketTimeout;
+          primary = createClientDatanodeProtocolProxy(primaryNode, conf, block,
+              accessToken, recoveryTimeout);
           newBlock = primary.recoverBlock(block, isAppend, newnodes);
         } catch (IOException e) {
           LOG.warn("Failed recovery attempt #" + recoveryErrorCount +