Bladeren bron

HDFS-561. Fix write pipeline READ_TIMEOUT.
(Todd Lipcon via dhruba)



git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-0.20-append@955380 13f79535-47bb-0310-9956-ffa450edef68

Dhruba Borthakur 15 jaren geleden
bovenliggende
commit
fe79d0846f

+ 2 - 0
CHANGES.txt

@@ -35,6 +35,8 @@ Release 0.20-append - Unreleased
 
   BUG FIXES
 
+    HDFS-561. Fix write pipeline READ_TIMEOUT.
+    (Todd Lipcon via dhruba)
 
 
 Release 0.20.3 - Unreleased

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

@@ -661,7 +661,9 @@ public class DFSClient implements FSConstants, java.io.Closeable {
       final DatanodeInfo[] datanodes = lb.getLocations();
       
       //try each datanode location of the block
-      final int timeout = 3000 * datanodes.length + socketTimeout;
+      final int timeout = (socketTimeout > 0) ? (socketTimeout + 
+        HdfsConstants.READ_TIMEOUT_EXTENSION * datanodes.length) : 0;
+     
       boolean done = false;
       for(int j = 0; !done && j < datanodes.length; j++) {
         Socket sock = null;

+ 1 - 0
src/hdfs/org/apache/hadoop/hdfs/server/common/HdfsConstants.java

@@ -48,6 +48,7 @@ public interface HdfsConstants {
 
   // Timeouts for communicating with DataNode for streaming writes/reads
   public static int READ_TIMEOUT = 60 * 1000;
+  public static int READ_TIMEOUT_EXTENSION = 3 * 1000;
   public static int WRITE_TIMEOUT = 8 * 60 * 1000;
   public static int WRITE_TIMEOUT_EXTENSION = 5 * 1000; //for write pipeline
 

+ 2 - 1
src/hdfs/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java

@@ -276,7 +276,8 @@ class DataXceiver implements Runnable, FSConstants {
         mirrorTarget = NetUtils.createSocketAddr(mirrorNode);
         mirrorSock = datanode.newSocket();
         try {
-          int timeoutValue = numTargets * datanode.socketTimeout;
+          int timeoutValue = datanode.socketTimeout +
+                             (HdfsConstants.READ_TIMEOUT_EXTENSION * numTargets);
           int writeTimeout = datanode.socketWriteTimeout + 
                              (HdfsConstants.WRITE_TIMEOUT_EXTENSION * numTargets);
           NetUtils.connect(mirrorSock, mirrorTarget, timeoutValue);