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;