Explorar el Código

HDFS-7916. 'reportBadBlocks' from datanodes to standby Node BPServiceActor goes for infinite loop (Contributed by Vinayakumar B)

(cherry picked from commit 867d5d2675b8fb73c40fac1e581b02b005459d95)
Vinayakumar B hace 10 años
padre
commit
1c8d54bc04

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

@@ -35,6 +35,9 @@ Release 2.7.1 - UNRELEASED
     HDFS-8179. DFSClient#getServerDefaults returns null within 1
     hour of system start. (Xiaoyu Yao via Arpit Agarwal)
 
+    HDFS-7916. 'reportBadBlocks' from datanodes to standby Node BPServiceActor
+    goes for infinite loop (vinayakumarb)
+
 Release 2.7.0 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 6 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/ReportBadBlockAction.java

@@ -26,6 +26,7 @@ import org.apache.hadoop.hdfs.protocol.ExtendedBlock;
 import org.apache.hadoop.hdfs.protocol.LocatedBlock;
 import org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolClientSideTranslatorPB;
 import org.apache.hadoop.hdfs.server.protocol.DatanodeRegistration;
+import org.apache.hadoop.ipc.StandbyException;
 
 /**
  * ReportBadBlockAction is an instruction issued by {{BPOfferService}} to
@@ -58,8 +59,11 @@ public class ReportBadBlockAction implements BPServiceActorAction {
         dnArr, uuids, types) };
 
     try {
-      bpNamenode.reportBadBlocks(locatedBlock);  
-    } catch (IOException e){
+      bpNamenode.reportBadBlocks(locatedBlock);
+    } catch (StandbyException e) {
+      DataNode.LOG.warn("Failed to report bad block " + block
+          + " to standby namenode");
+    } catch (IOException e) {
       throw new BPServiceActorActionException("Failed to report bad block "
           + block + " to namenode: ");
     }