From 0cf9128bf5f6a2ce5fc9842c6966e374c7aae7fd Mon Sep 17 00:00:00 2001 From: tom lee Date: Mon, 21 Mar 2022 11:32:50 +0800 Subject: [PATCH 1/2] HDFS-16513. [SBN read] Observer Namenode does not trigger the edits rolling of active Namenode --- .../apache/hadoop/hdfs/server/namenode/FSNamesystem.java | 8 ++++++++ .../hadoop/hdfs/server/namenode/ha/EditLogTailer.java | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index c03281d6a9a91..50c5c1fecf22b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -1938,6 +1938,14 @@ public boolean isInStandbyState() { HAServiceState.OBSERVER == haContext.getState().getServiceState(); } + public boolean isInObserverState() { + if (haContext == null || haContext.getState() == null) { + return haEnabled; + } + + return HAServiceState.OBSERVER == haContext.getState().getServiceState(); + } + /** * return a list of blocks & their locations on {@code datanode} whose * total size is {@code size} 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 ec1169b85a830..15d8e62296a40 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 @@ -505,7 +505,7 @@ private void doWork() { // read any more transactions since the last time a roll was // triggered. boolean triggeredLogRoll = false; - if (tooLongSinceLastLoad() && + if (!namesystem.isInObserverState() && tooLongSinceLastLoad() && lastRollTriggerTxId < lastLoadedTxnId) { triggerActiveLogRoll(); triggeredLogRoll = true; From 0b1946bd7012b025bdc7ef89e679edba15f68242 Mon Sep 17 00:00:00 2001 From: tom lee Date: Wed, 13 Apr 2022 14:55:58 +0800 Subject: [PATCH 2/2] fix bug --- .../org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index 50c5c1fecf22b..efccff6bddb9b 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -1940,7 +1940,7 @@ public boolean isInStandbyState() { public boolean isInObserverState() { if (haContext == null || haContext.getState() == null) { - return haEnabled; + return false; } return HAServiceState.OBSERVER == haContext.getState().getServiceState();