Browse Source

HDFS-10688. BPServiceActor may run into a tight loop for sending block report when hitting IOException. Contributed by Chen Liang.

(cherry picked from commit 0cde9e12a7175e4d8bc4ccd5c36055b280d1fbd6)
Jing Zhao 9 years ago
parent
commit
30c772fc59

+ 11 - 6
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java

@@ -649,19 +649,24 @@ class BPServiceActor implements Runnable {
           return;
         }
         LOG.warn("RemoteException in offerService", re);
-        try {
-          long sleepTime = Math.min(1000, dnConf.heartBeatInterval);
-          Thread.sleep(sleepTime);
-        } catch (InterruptedException ie) {
-          Thread.currentThread().interrupt();
-        }
+        sleepAfterException();
       } catch (IOException e) {
         LOG.warn("IOException in offerService", e);
+        sleepAfterException();
       }
       processQueueMessages();
     } // while (shouldRun())
   } // offerService
 
+  private void sleepAfterException() {
+    try {
+      long sleepTime = Math.min(1000, dnConf.heartBeatInterval);
+      Thread.sleep(sleepTime);
+    } catch (InterruptedException ie) {
+      Thread.currentThread().interrupt();
+    }
+  }
+
   /**
    * Register one bp with the corresponding NameNode
    * <p>