فهرست منبع

HDFS-12749. DN may not send block report to NN after NN restart. Contributed by Xiaoqiao He.

(cherry picked from commit c4e27ef7735acd6f91b73d2ecb0227f8dd75a2e4)
Kihwal Lee 5 سال پیش
والد
کامیت
d112bf8c34

+ 16 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java

@@ -773,11 +773,16 @@ class BPServiceActor implements Runnable {
       } catch(EOFException e) {  // namenode might have just restarted
         LOG.info("Problem connecting to server: " + nnAddr + " :"
             + e.getLocalizedMessage());
-        sleepAndLogInterrupts(1000, "connecting to server");
       } catch(SocketTimeoutException e) {  // namenode is busy
         LOG.info("Problem connecting to server: " + nnAddr);
-        sleepAndLogInterrupts(1000, "connecting to server");
+      } catch(RemoteException e) {
+        LOG.warn("RemoteException in register", e);
+        throw e;
+      } catch(IOException e) {
+        LOG.warn("Problem connecting to server: " + nnAddr);
       }
+      // Try again in a second
+      sleepAndLogInterrupts(1000, "connecting to server");
     }
 
     LOG.info("Block pool " + this + " successfully registered with NN");
@@ -880,6 +885,15 @@ class BPServiceActor implements Runnable {
           if (bpos.processCommandFromActor(cmd, this) == false) {
             return false;
           }
+        } catch (RemoteException re) {
+          String reClass = re.getClassName();
+          if (UnregisteredNodeException.class.getName().equals(reClass) ||
+              DisallowedDatanodeException.class.getName().equals(reClass) ||
+              IncorrectVersionException.class.getName().equals(reClass)) {
+            LOG.warn(this + " is shutting down", re);
+            shouldServiceRun = false;
+            return false;
+          }
         } catch (IOException ioe) {
           LOG.warn("Error processing datanode Command", ioe);
         }