You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ae...@apache.org on 2017/08/28 20:24:38 UTC

hadoop git commit: HDFS-12361. Ozone: SCM failed to start when a container metadata is empty. Contributed by Weiwei Yang.

Repository: hadoop
Updated Branches:
  refs/heads/HDFS-7240 f0d6a3eaa -> b06f4f63e


HDFS-12361. Ozone: SCM failed to start when a container metadata is empty. Contributed by Weiwei Yang.


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/b06f4f63
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/b06f4f63
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/b06f4f63

Branch: refs/heads/HDFS-7240
Commit: b06f4f63e350d3276da989843ab778d3b5679ae8
Parents: f0d6a3e
Author: Anu Engineer <ae...@apache.org>
Authored: Mon Aug 28 13:20:45 2017 -0700
Committer: Anu Engineer <ae...@apache.org>
Committed: Mon Aug 28 13:20:45 2017 -0700

----------------------------------------------------------------------
 .../common/impl/ContainerManagerImpl.java       | 34 +++++++++++---------
 1 file changed, 19 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/b06f4f63/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerManagerImpl.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerManagerImpl.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerManagerImpl.java
index aa6946c..7b65c3f 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerManagerImpl.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/ozone/container/common/impl/ContainerManagerImpl.java
@@ -207,28 +207,32 @@ public class ContainerManagerImpl implements ContainerManager {
 
       dis = new DigestInputStream(containerStream, sha);
 
-      ContainerData containerData = ContainerData.getFromProtBuf(
-          ContainerProtos.ContainerData.parseDelimitedFrom(dis));
-
-
-      ContainerProtos.ContainerMeta meta = ContainerProtos.ContainerMeta
-          .parseDelimitedFrom(metaStream);
-
-      if (meta != null &&
-          !DigestUtils.sha256Hex(sha.digest()).equals(meta.getHash())) {
+      ContainerProtos.ContainerData containerDataProto =
+          ContainerProtos.ContainerData.parseDelimitedFrom(dis);
+      ContainerData containerData;
+      if (containerDataProto == null) {
+        // Sometimes container metadata might have been created but empty,
+        // when loading the info we get a null, this often means last time
+        // SCM was ending up at some middle phase causing that the metadata
+        // was not populated. Such containers are marked as inactive.
+        containerMap.put(keyName, new ContainerStatus(null, false));
+        return;
+      }
+      containerData = ContainerData.getFromProtBuf(containerDataProto);
+      ContainerProtos.ContainerMeta meta =
+          ContainerProtos.ContainerMeta.parseDelimitedFrom(metaStream);
+      if (meta != null && !DigestUtils.sha256Hex(sha.digest())
+          .equals(meta.getHash())) {
         // This means we were not able read data from the disk when booted the
         // datanode. We are going to rely on SCM understanding that we don't
-        // have
-        // valid data for this container when we send container reports.
+        // have valid data for this container when we send container reports.
         // Hopefully SCM will ask us to delete this container and rebuild it.
-        LOG.error("Invalid SHA found for container data. Name :{}" +
-            "cowardly refusing to read invalid data", containerName);
+        LOG.error("Invalid SHA found for container data. Name :{}"
+            + "cowardly refusing to read invalid data", containerName);
         containerMap.put(keyName, new ContainerStatus(null, false));
         return;
       }
-
       containerMap.put(keyName, new ContainerStatus(containerData, true));
-
     } catch (IOException | NoSuchAlgorithmException ex) {
       LOG.error("read failed for file: {} ex: {}", containerName,
           ex.getMessage());


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org