Author: suresh
Date: Fri Nov 30 06:01:51 2012
New Revision: 1415502

URL: http://svn.apache.org/viewvc?rev=1415502&view=rev
Log:
HDFS-4233. NN keeps serving even after no journals started while rolling edit. 
Contributed by Kihwal Lee.

Modified:
    
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
    
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
    
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestEditLog.java

Modified: 
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt?rev=1415502&r1=1415501&r2=1415502&view=diff
==============================================================================
--- 
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt 
(original)
+++ 
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt 
Fri Nov 30 06:01:51 2012
@@ -11,6 +11,8 @@ Release 0.23.6 - UNRELEASED
   OPTIMIZATIONS
 
   BUG FIXES
+    HDFS-4233. NN keeps serving even after no journals started while rolling
+    edit. (Kihwal Lee via suresh)
 
 Release 0.23.5 - UNRELEASED
 

Modified: 
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java?rev=1415502&r1=1415501&r2=1415502&view=diff
==============================================================================
--- 
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
 (original)
+++ 
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java
 Fri Nov 30 06:01:51 2012
@@ -440,7 +440,8 @@ public class FSEditLog  {
       synchronized (this) {
         if (sync) {
           try {
-            if (badJournals.size() >= journals.size()) {
+            if (badJournals.size() >= journals.size() ||
+                candidateJournals.isEmpty()) {
               final String msg =
                 "Could not sync enough journals to persistent storage. "
                 + "Unsynced transactions: " + (txid - synctxid);

Modified: 
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestEditLog.java
URL: 
http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestEditLog.java?rev=1415502&r1=1415501&r2=1415502&view=diff
==============================================================================
--- 
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestEditLog.java
 (original)
+++ 
hadoop/common/branches/branch-0.23/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestEditLog.java
 Fri Nov 30 06:01:51 2012
@@ -47,6 +47,7 @@ import org.apache.hadoop.hdfs.server.com
 import org.apache.hadoop.hdfs.server.namenode.NNStorage.NameNodeDirType;
 import org.apache.hadoop.hdfs.server.namenode.NNStorage;
 import org.apache.hadoop.test.GenericTestUtils;
+import org.apache.hadoop.util.ExitUtil.ExitException;
 import org.apache.hadoop.util.StringUtils;
 import org.apache.log4j.Level;
 import org.aspectj.util.FileUtil;
@@ -185,7 +186,9 @@ public class TestEditLog extends TestCas
     MiniDFSCluster cluster = null;
     FileSystem fileSys = null;
     try {
-      cluster = new 
MiniDFSCluster.Builder(conf).numDataNodes(NUM_DATA_NODES).build();
+      cluster = new MiniDFSCluster.Builder(conf)
+          .numDataNodes(NUM_DATA_NODES)
+          .checkExitOnShutdown(false).build();
       cluster.waitActive();
       fileSys = cluster.getFileSystem();
       final FSNamesystem namesystem = cluster.getNamesystem();
@@ -212,6 +215,15 @@ public class TestEditLog extends TestCas
       
       editLog.logSetReplication("fakefile", (short) 2);
       editLog.logSync();
+
+      // logSync() should fail if there is no active journal.
+      editLog.endCurrentLogSegment(true);
+      editLog.logSetReplication("fakefile", (short) 3);
+      try {
+        editLog.logSync();
+        fail("logSync() should have failed when no journal is active.");
+      } catch (ExitException e) { }
+      
       
       editLog.close();
     } finally {


Reply via email to