Author: jing9
Date: Wed Feb 26 23:17:53 2014
New Revision: 1572337

URL: http://svn.apache.org/r1572337
Log:
HDFS-6023. Test whether the standby NN continues to checkpoint after the 
prepare stage. Contributed by Haohui Mai.

Modified:
    
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5535.txt
    
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NNStorage.java
    
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestRollingUpgrade.java

Modified: 
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5535.txt
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5535.txt?rev=1572337&r1=1572336&r2=1572337&view=diff
==============================================================================
--- 
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5535.txt
 (original)
+++ 
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5535.txt
 Wed Feb 26 23:17:53 2014
@@ -108,3 +108,6 @@ HDFS-5535 subtasks:
 
     HDFS-6019. Standby NN might not checkpoint when processing the rolling
     upgrade marker. (Haohui Mai via jing9)
+
+    HDFS-6023. Test whether the standby NN continues to checkpoint after the
+    prepare stage. (Haohui Mai via jing9)

Modified: 
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NNStorage.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NNStorage.java?rev=1572337&r1=1572336&r2=1572337&view=diff
==============================================================================
--- 
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NNStorage.java
 (original)
+++ 
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/NNStorage.java
 Wed Feb 26 23:17:53 2014
@@ -676,7 +676,6 @@ public class NNStorage extends Storage i
     return getNameNodeFileName(NameNodeFile.IMAGE_ROLLBACK, txid);
   }
 
-  @VisibleForTesting
   private static String getNameNodeFileName(NameNodeFile nnf, long txid) {
     return String.format("%s_%019d", nnf.getName(), txid);
   }

Modified: 
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestRollingUpgrade.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestRollingUpgrade.java?rev=1572337&r1=1572336&r2=1572337&view=diff
==============================================================================
--- 
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestRollingUpgrade.java
 (original)
+++ 
hadoop/common/branches/HDFS-5535/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestRollingUpgrade.java
 Wed Feb 26 23:17:53 2014
@@ -34,6 +34,7 @@ import org.apache.hadoop.hdfs.qjournal.M
 import org.apache.hadoop.hdfs.server.common.HdfsServerConstants.StartupOption;
 import org.apache.hadoop.hdfs.server.datanode.DataNode;
 import org.apache.hadoop.hdfs.server.namenode.FSImage;
+import org.apache.hadoop.hdfs.server.namenode.NNStorage;
 import org.apache.hadoop.hdfs.tools.DFSAdmin;
 import org.junit.Assert;
 import org.junit.Test;
@@ -467,17 +468,66 @@ public class TestRollingUpgrade {
     }
   }
 
+  @Test(timeout = 300000)
+  public void testCheckpoint() throws IOException, InterruptedException {
+    final Configuration conf = new Configuration();
+    conf.setInt(DFSConfigKeys.DFS_HA_TAILEDITS_PERIOD_KEY, 1);
+    conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKPOINT_PERIOD_KEY, 1);
+
+    MiniQJMHACluster cluster = null;
+    final Path foo = new Path("/foo");
+
+    try {
+      cluster = new MiniQJMHACluster.Builder(conf).build();
+      MiniDFSCluster dfsCluster = cluster.getDfsCluster();
+      dfsCluster.waitActive();
+
+      dfsCluster.transitionToActive(0);
+      DistributedFileSystem dfs = dfsCluster.getFileSystem(0);
+
+      // start rolling upgrade
+      RollingUpgradeInfo info = dfs
+          .rollingUpgrade(RollingUpgradeAction.PREPARE);
+      Assert.assertTrue(info.isStarted());
+
+      queryForPreparation(dfs);
+
+      dfs.mkdirs(foo);
+      long txid = dfs.rollEdits();
+      Assert.assertTrue(txid > 0);
+
+      int retries = 0;
+      while (++retries < 5) {
+        NNStorage storage = dfsCluster.getNamesystem(1).getFSImage()
+            .getStorage();
+        if (storage.getFsImageName(txid - 1) != null) {
+          return;
+        }
+        Thread.sleep(1000);
+      }
+      Assert.fail("new checkpoint does not exist");
+
+    } finally {
+      if (cluster != null) {
+        cluster.shutdown();
+      }
+    }
+  }
+
   static void queryForPreparation(DistributedFileSystem dfs) throws 
IOException,
       InterruptedException {
     RollingUpgradeInfo info;
     int retries = 0;
-    while (retries < 10) {
+    while (++retries < 10) {
       info = dfs.rollingUpgrade(RollingUpgradeAction.QUERY);
       if (info.createdRollbackImages()) {
         break;
       }
       Thread.sleep(1000);
-      ++retries;
+    }
+
+    if (retries >= 10) {
+      Assert.fail("Query return false");
     }
   }
 }


Reply via email to