From 2d1f3611cdb3cac3678cb8dd76da8b6dbdc99215 Mon Sep 17 00:00:00 2001 From: Kihwal Lee Date: Mon, 21 Oct 2019 16:34:17 -0500 Subject: [PATCH] HDFS-12749. DN may not send block report to NN after NN restart. Contributed by Xiaoqiao He. (cherry picked from commit c4e27ef7735acd6f91b73d2ecb0227f8dd75a2e4) --- .../hdfs/server/datanode/BPServiceActor.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java index 93af5ec6efc..96977a9b7f4 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BPServiceActor.java @@ -776,11 +776,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"); @@ -883,6 +888,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); }