Browse Source

HADOOP-4936. Improvements to TestSafeMode. Contributed by Konstantin Shvachko.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/core/trunk@730331 13f79535-47bb-0310-9956-ffa450edef68
Konstantin Shvachko 16 years ago
parent
commit
efc6b7c171
2 changed files with 34 additions and 16 deletions
  1. 2 0
      CHANGES.txt
  2. 32 16
      src/test/org/apache/hadoop/hdfs/TestSafeMode.java

+ 2 - 0
CHANGES.txt

@@ -11,6 +11,8 @@ Trunk (unreleased changes)
 
   IMPROVEMENTS
 
+    HADOOP-4936. Improvements to TestSafeMode. (shv)
+
   OPTIMIZATIONS
 
   BUG FIXES

+ 32 - 16
src/test/org/apache/hadoop/hdfs/TestSafeMode.java

@@ -23,24 +23,37 @@ import java.io.IOException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hdfs.protocol.FSConstants.SafeModeAction;
-import org.apache.hadoop.hdfs.server.namenode.NameNode;
 
 import junit.framework.TestCase;
 
 /**
- * This test makes sure that if SafeMode is manually entered, NameNode does not
- * come out of safe mode even after the startup safemode conditions are met.
+ * Tests to verify safe mode correctness.
  */
 public class TestSafeMode extends TestCase {
   
   static Log LOG = LogFactory.getLog(TestSafeMode.class);
-  
+
+  /**
+   * This test verifies that if SafeMode is manually entered, name-node does not
+   * come out of safe mode even after the startup safe mode conditions are met.
+   * <ol>
+   * <li>Start cluster with 1 data-node.</li>
+   * <li>Create 2 files with replication 1.</li>
+   * <li>Re-start cluster with 0 data-nodes. 
+   * Name-node should stay in automatic safe-mode.</li>
+   * <li>Enter safe mode manually.</li>
+   * <li>Start the data-node.</li>
+   * <li>Wait longer than <tt>dfs.safemode.extension</tt> and 
+   * verify that the name-node is still in safe mode.</li>
+   * </ol>
+   *  
+   * @throws IOException
+   */
   public void testManualSafeMode() throws IOException {
     MiniDFSCluster cluster = null;
-    FileSystem fs = null;
+    DistributedFileSystem fs = null;
     try {
       Configuration conf = new Configuration();
       // disable safemode extension to make the test run faster.
@@ -48,7 +61,7 @@ public class TestSafeMode extends TestCase {
       cluster = new MiniDFSCluster(conf, 1, true, null);
       cluster.waitActive();
       
-      fs = cluster.getFileSystem();
+      fs = (DistributedFileSystem)cluster.getFileSystem();
       Path file1 = new Path("/tmp/testManualSafeMode/file1");
       Path file2 = new Path("/tmp/testManualSafeMode/file2");
       
@@ -56,37 +69,40 @@ public class TestSafeMode extends TestCase {
       
       // create two files with one block each.
       DFSTestUtil.createFile(fs, file1, 1000, (short)1, 0);
-      DFSTestUtil.createFile(fs, file2, 2000, (short)1, 0);    
+      DFSTestUtil.createFile(fs, file2, 2000, (short)1, 0);
+      fs.close();
       cluster.shutdown();
       
       // now bring up just the NameNode.
       cluster = new MiniDFSCluster(conf, 0, false, null);
       cluster.waitActive();
+      fs = (DistributedFileSystem)cluster.getFileSystem();
       
       LOG.info("Restarted cluster with just the NameNode");
       
-      NameNode namenode = cluster.getNameNode();
-      
       assertTrue("No datanode is started. Should be in SafeMode", 
-                 namenode.isInSafeMode());
+                 fs.setSafeMode(SafeModeAction.SAFEMODE_GET));
       
       // manually set safemode.
-      namenode.setSafeMode(SafeModeAction.SAFEMODE_ENTER);
+      fs.setSafeMode(SafeModeAction.SAFEMODE_ENTER);
       
       // now bring up the datanode and wait for it to be active.
       cluster.startDataNodes(conf, 1, true, null, null);
       cluster.waitActive();
       
       LOG.info("Datanode is started.");
-      
+
+      // wait longer than dfs.safemode.extension
       try {
         Thread.sleep(2000);
       } catch (InterruptedException ignored) {}
       
-      assertTrue("should still be in SafeMode", namenode.isInSafeMode());
+      assertTrue("should still be in SafeMode",
+          fs.setSafeMode(SafeModeAction.SAFEMODE_GET));
       
-      namenode.setSafeMode(SafeModeAction.SAFEMODE_LEAVE);
-      assertFalse("should not be in SafeMode", namenode.isInSafeMode());
+      fs.setSafeMode(SafeModeAction.SAFEMODE_LEAVE);
+      assertFalse("should not be in SafeMode",
+          fs.setSafeMode(SafeModeAction.SAFEMODE_GET));
     } finally {
       if(fs != null) fs.close();
       if(cluster!= null) cluster.shutdown();