Ver Fonte

HDFS-2454. Move maxXceiverCount check to before starting the thread in dataXceiver. Contributed by Harsh J

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1204124 13f79535-47bb-0310-9956-ffa450edef68
Eli Collins há 13 anos atrás
pai
commit
8e8bb50afd

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -127,6 +127,9 @@ Release 0.23.1 - UNRELEASED
     HDFS-2568. Use a set to manage child sockets in XceiverServer.
     (harsh via eli)
 
+    HDFS-2454. Move maxXceiverCount check to before starting the
+    thread in dataXceiver. (harsh via eli)
+
     HDFS-2536. Remove unused imports. (harsh via eli)
 
   OPTIMIZATIONS

+ 0 - 8
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiver.java

@@ -163,14 +163,6 @@ class DataXceiver extends Receiver implements Runnable {
           s.setSoTimeout(stdTimeout);
         }
 
-        // Make sure the xceiver count is not exceeded
-        int curXceiverCount = datanode.getXceiverCount();
-        if (curXceiverCount > dataXceiverServer.maxXceiverCount) {
-          throw new IOException("xceiverCount " + curXceiverCount
-                                + " exceeds the limit of concurrent xcievers "
-                                + dataXceiverServer.maxXceiverCount);
-        }
-
         opStartTime = now();
         processOp(op);
         ++opsProcessed;

+ 9 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/DataXceiverServer.java

@@ -135,6 +135,15 @@ class DataXceiverServer implements Runnable {
       try {
         s = ss.accept();
         s.setTcpNoDelay(true);
+
+        // Make sure the xceiver count is not exceeded
+        int curXceiverCount = datanode.getXceiverCount();
+        if (curXceiverCount > maxXceiverCount) {
+          throw new IOException("Xceiver count " + curXceiverCount
+              + " exceeds the limit of concurrent xcievers: "
+              + maxXceiverCount);
+        }
+
         new Daemon(datanode.threadGroup, new DataXceiver(s, datanode, this))
             .start();
       } catch (SocketTimeoutException ignored) {