From b7a66471ca9e18b6a3c6729962040bf3f54dd15a Mon Sep 17 00:00:00 2001 From: Ayush Saxena Date: Thu, 22 Aug 2019 02:25:06 +0530 Subject: [PATCH] HDFS-14276. [SBN read] Reduce tailing overhead. Contributed by Wei-Chiu Chuang. --- .../hadoop/hdfs/server/namenode/ha/EditLogTailer.java | 8 ++++++-- .../hadoop/hdfs/server/namenode/TestNameNodeMXBean.java | 3 +-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/EditLogTailer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/EditLogTailer.java index ce2e6a5be59..56b87cd3a76 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/EditLogTailer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/EditLogTailer.java @@ -467,10 +467,12 @@ public class EditLogTailer { try { // There's no point in triggering a log roll if the Standby hasn't // read any more transactions since the last time a roll was - // triggered. + // triggered. + boolean triggeredLogRoll = false; if (tooLongSinceLastLoad() && lastRollTriggerTxId < lastLoadedTxnId) { triggerActiveLogRoll(); + triggeredLogRoll = true; } /** * Check again in case someone calls {@link EditLogTailer#stop} while @@ -496,7 +498,9 @@ public class EditLogTailer { Time.monotonicNow() - startTime); } //Update NameDirSize Metric - namesystem.getFSImage().getStorage().updateNameDirSize(); + if (triggeredLogRoll) { + namesystem.getFSImage().getStorage().updateNameDirSize(); + } } catch (EditLogInputException elie) { LOG.warn("Error while reading edits from disk. Will try again.", elie); } catch (InterruptedException ie) { diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java index 07a494596c4..34beb56703e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/TestNameNodeMXBean.java @@ -666,6 +666,7 @@ public class TestNameNodeMXBean { public void testNNDirectorySize() throws Exception{ Configuration conf = new Configuration(); conf.setInt(DFSConfigKeys.DFS_HA_TAILEDITS_PERIOD_KEY, 1); + conf.setInt(DFSConfigKeys.DFS_HA_LOGROLL_PERIOD_KEY, 0); MiniDFSCluster cluster = null; for (int i = 0; i < 5; i++) { try{ @@ -695,8 +696,6 @@ public class TestNameNodeMXBean { FSNamesystem nn0 = cluster.getNamesystem(0); FSNamesystem nn1 = cluster.getNamesystem(1); - checkNNDirSize(cluster.getNameDirs(0), nn0.getNameDirSize()); - checkNNDirSize(cluster.getNameDirs(1), nn1.getNameDirSize()); cluster.transitionToActive(0); fs = cluster.getFileSystem(0); DFSTestUtil.createFile(fs, new Path("/file"), 0, (short) 1, 0L);