From a96ff860449ced505f481486d603b904f846bf42 Mon Sep 17 00:00:00 2001 From: Arpit Agarwal Date: Sat, 11 Jan 2014 00:14:19 +0000 Subject: [PATCH] HDFS-5747. Merging r1557289 from trunk to branch-2. git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1557291 13f79535-47bb-0310-9956-ffa450edef68 --- hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 4 +++- .../blockmanagement/BlockInfoUnderConstruction.java | 8 +++++--- .../org/apache/hadoop/hdfs/server/namenode/NameNode.java | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 06cb2d07b0a..74b0829d837 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -260,7 +260,9 @@ Release 2.4.0 - UNRELEASED HDFS-5756. hadoopRzOptionsSetByteBufferPool does not accept NULL argument, contrary to docs. (cmccabe via wang) -BREAKDOWN OF HDFS-2832 SUBTASKS AND RELATED JIRAS + HDFS-5747. Fix NPEs in BlockManager. (Arpit Agarwal) + + BREAKDOWN OF HDFS-2832 SUBTASKS AND RELATED JIRAS HDFS-4985. Add storage type to the protocol and expose it in block report and block locations. (Arpit Agarwal) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoUnderConstruction.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoUnderConstruction.java index 54e560ddeb8..1161077f49d 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoUnderConstruction.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockInfoUnderConstruction.java @@ -324,12 +324,14 @@ void addReplicaIfNotPresent(DatanodeStorageInfo storage, Iterator it = replicas.iterator(); while (it.hasNext()) { ReplicaUnderConstruction r = it.next(); - if(r.getExpectedStorageLocation() == storage) { + DatanodeStorageInfo expectedLocation = r.getExpectedStorageLocation(); + if(expectedLocation == storage) { // Record the gen stamp from the report r.setGenerationStamp(block.getGenerationStamp()); return; - } else if (r.getExpectedStorageLocation().getDatanodeDescriptor() == - storage.getDatanodeDescriptor()) { + } else if (expectedLocation != null && + expectedLocation.getDatanodeDescriptor() == + storage.getDatanodeDescriptor()) { // The Datanode reported that the block is on a different storage // than the one chosen by BlockPlacementPolicy. This can occur as diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java index 2346a358d7e..163930789c0 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NameNode.java @@ -549,8 +549,8 @@ private void startCommonServices(Configuration conf) throws IOException { } private void stopCommonServices() { - if(namesystem != null) namesystem.close(); if(rpcServer != null) rpcServer.stop(); + if(namesystem != null) namesystem.close(); if (pauseMonitor != null) pauseMonitor.stop(); if (plugins != null) { for (ServicePlugin p : plugins) {