Author: eli
Date: Thu Jan 26 23:48:08 2012
New Revision: 1236450
URL: http://svn.apache.org/viewvc?rev=1236450&view=rev
Log:
HDFS-2838. NPE in FSNamesystem when in safe mode. Contributed by Gregory Chanan
Modified:
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestMiniDFSCluster.java
Modified:
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt?rev=1236450&r1=1236449&r2=1236450&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt
(original)
+++
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt
Thu Jan 26 23:48:08 2012
@@ -131,3 +131,5 @@ HDFS-2804. Should not mark blocks under-
HDFS-2807. Service level authorizartion for HAServiceProtocol. (jitendra)
HDFS-2809. Add test to verify that delegation tokens are honored after
failover. (jitendra and atm)
+
+HDFS-2838. NPE in FSNamesystem when in safe mode. (Gregory Chanan via eli)
Modified:
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=1236450&r1=1236449&r2=1236450&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
(original)
+++
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
Thu Jan 26 23:48:08 2012
@@ -3623,11 +3623,10 @@ public class FSNamesystem implements Nam
assert assertsOn = true; // set to true if asserts are on
if (!assertsOn) return;
-
- int activeBlocks = blockManager.getActiveBlockCount();
if (blockTotal == -1 && blockSafe == -1) {
return; // manual safe mode
}
+ int activeBlocks = blockManager.getActiveBlockCount();
if ((blockTotal != activeBlocks) &&
!(blockSafe >= 0 && blockSafe <= blockTotal)) {
throw new AssertionError(
Modified:
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestMiniDFSCluster.java
URL:
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestMiniDFSCluster.java?rev=1236450&r1=1236449&r2=1236450&view=diff
==============================================================================
---
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestMiniDFSCluster.java
(original)
+++
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestMiniDFSCluster.java
Thu Jan 26 23:48:08 2012
@@ -20,6 +20,7 @@ package org.apache.hadoop.hdfs;
import junit.framework.Assert;
import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hdfs.protocol.FSConstants;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -37,6 +38,7 @@ public class TestMiniDFSCluster {
private static final String CLUSTER_1 = "cluster1";
private static final String CLUSTER_2 = "cluster2";
private static final String CLUSTER_3 = "cluster3";
+ private static final String CLUSTER_4 = "cluster4";
protected String testDataPath;
protected File testDataDir;
@Before
@@ -104,5 +106,21 @@ public class TestMiniDFSCluster {
}
}
-
+ @Test(timeout=100000)
+ public void testIsClusterUpAfterShutdown() throws Throwable {
+ Configuration conf = new HdfsConfiguration();
+ File testDataCluster4 = new File(testDataPath, CLUSTER_4);
+ String c4Path = testDataCluster4.getAbsolutePath();
+ conf.set(MiniDFSCluster.HDFS_MINIDFS_BASEDIR, c4Path);
+ MiniDFSCluster cluster4 = new MiniDFSCluster.Builder(conf).build();
+ try {
+ DistributedFileSystem dfs = (DistributedFileSystem)
cluster4.getFileSystem();
+ dfs.setSafeMode(FSConstants.SafeModeAction.SAFEMODE_ENTER);
+ cluster4.shutdown();
+ } finally {
+ while(cluster4.isClusterUp()){
+ Thread.sleep(1000);
+ }
+ }
+ }
}