Selaa lähdekoodia

HDFS-12603. Enable async edit logging by default.

(cherry picked from commit afb42aeabf1317b755ab79e0265bc90920c896ac)
Andrew Wang 7 vuotta sitten
vanhempi
commit
e9f3f49b6d

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSConfigKeys.java

@@ -323,7 +323,7 @@ public class DFSConfigKeys extends CommonConfigurationKeys {
 
   public static final String  DFS_NAMENODE_EDITS_ASYNC_LOGGING =
       "dfs.namenode.edits.asynclogging";
-  public static final boolean DFS_NAMENODE_EDITS_ASYNC_LOGGING_DEFAULT = false;
+  public static final boolean DFS_NAMENODE_EDITS_ASYNC_LOGGING_DEFAULT = true;
 
   public static final String  DFS_LIST_LIMIT = "dfs.ls.limit";
   public static final int     DFS_LIST_LIMIT_DEFAULT = 1000;

+ 6 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLog.java

@@ -130,7 +130,7 @@ public class FSEditLog implements LogsPurgeable {
    * 
    * In a non-HA setup:
    * 
-   * The log starts in UNITIALIZED state upon construction. Once it's
+   * The log starts in UNINITIALIZED state upon construction. Once it's
    * initialized, it is usually in IN_SEGMENT state, indicating that edits may
    * be written. In the middle of a roll, or while saving the namespace, it
    * briefly enters the BETWEEN_LOG_SEGMENTS state, indicating that the previous
@@ -1837,4 +1837,9 @@ public class FSEditLog implements LogsPurgeable {
     }
     return count;
   }
+
+  @Override
+  public String toString() {
+    return super.toString();
+  }
 }

+ 5 - 0
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSEditLogAsync.java

@@ -319,4 +319,9 @@ class FSEditLogAsync extends FSEditLog implements Runnable {
       return "["+getClass().getSimpleName()+" op:"+op+" call:"+call+"]";
     }
   }
+
+  @Override
+  public String toString() {
+    return super.toString();
+  }
 }

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/resources/hdfs-default.xml

@@ -4105,7 +4105,7 @@
 
 <property>
   <name>dfs.namenode.edits.asynclogging</name>
-  <value>false</value>
+  <value>true</value>
   <description>
     If set to true, enables asynchronous edit logs in the Namenode.  If set
     to false, the Namenode uses the traditional synchronous edit logs.

+ 15 - 7
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/ha/TestFailureToReadEdits.java

@@ -75,6 +75,7 @@ public class TestFailureToReadEdits {
   private static final Random RANDOM = new Random();
 
   private final TestType clusterType;
+  private final boolean useAsyncEditLogging;
   private Configuration conf;
   private MiniDFSCluster cluster;
   private MiniQJMHACluster miniQjmHaCluster; // for QJM case only
@@ -88,18 +89,23 @@ public class TestFailureToReadEdits {
   };
   
   /**
-   * Run this suite of tests both for QJM-based HA and for file-based
-   * HA.
+   * Run this suite of tests for {QJM-based, file-based HA} x {async
+   * edit logging enabled, disabled}.
    */
   @Parameters
   public static Iterable<Object[]> data() {
-    return Arrays.asList(new Object[][] {
-        { TestType.SHARED_DIR_HA },
-        { TestType.QJM_HA } });
+    return Arrays.asList(new Object[][]{
+        {TestType.SHARED_DIR_HA, Boolean.FALSE},
+        {TestType.SHARED_DIR_HA, Boolean.TRUE},
+        {TestType.QJM_HA, Boolean.FALSE},
+        {TestType.QJM_HA, Boolean.TRUE},
+    });
   }
-  
-  public TestFailureToReadEdits(TestType clusterType) {
+
+  public TestFailureToReadEdits(TestType clusterType, Boolean
+      useAsyncEditLogging) {
     this.clusterType = clusterType;
+    this.useAsyncEditLogging = useAsyncEditLogging;
   }
 
   @Before
@@ -109,6 +115,8 @@ public class TestFailureToReadEdits {
     conf.setInt(DFSConfigKeys.DFS_NAMENODE_CHECKPOINT_TXNS_KEY, 1);
     conf.setInt(DFSConfigKeys.DFS_NAMENODE_NUM_CHECKPOINTS_RETAINED_KEY, 10);
     conf.setInt(DFSConfigKeys.DFS_HA_TAILEDITS_PERIOD_KEY, 1);
+    conf.setBoolean(DFSConfigKeys.DFS_NAMENODE_EDITS_ASYNC_LOGGING,
+        useAsyncEditLogging);
     HAUtil.setAllowStandbyReads(conf, true);
 
     if (clusterType == TestType.SHARED_DIR_HA) {