This is an automated email from the ASF dual-hosted git repository.

elek pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 8146368  HDDS-4419. Misleading SCM web UI Safe mode status  (#1599)
8146368 is described below

commit 8146368fd885267542aeb73c718626f69c25ca83
Author: Elek, Márton <[email protected]>
AuthorDate: Wed Jan 6 11:38:03 2021 +0100

    HDDS-4419. Misleading SCM web UI Safe mode status  (#1599)
---
 .../hdds/scm/safemode/ContainerSafeModeRule.java   | 19 +++++++++--------
 .../hdds/scm/safemode/DataNodeSafeModeRule.java    |  5 +++--
 .../scm/safemode/HealthyPipelineSafeModeRule.java  |  7 ++++---
 .../safemode/OneReplicaPipelineSafeModeRule.java   | 24 +++++++++++++---------
 .../apache/hadoop/hdds/scm/server/SCMMXBean.java   |  6 +++---
 .../hdds/scm/server/StorageContainerManager.java   | 10 +++++----
 .../main/resources/webapps/scm/scm-overview.html   | 12 +++++++++--
 7 files changed, 51 insertions(+), 32 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/ContainerSafeModeRule.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/ContainerSafeModeRule.java
index dbb4eb6..ffa0209 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/ContainerSafeModeRule.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/ContainerSafeModeRule.java
@@ -23,19 +23,18 @@ import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicLong;
 
-import com.google.common.base.Preconditions;
-import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.HddsConfigKeys;
+import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.hdds.scm.container.ContainerInfo;
 import org.apache.hadoop.hdds.scm.events.SCMEvents;
-import org.apache.hadoop.hdds.scm.server.SCMDatanodeProtocolServer
-    .NodeRegistrationContainerReport;
-
-import com.google.common.annotations.VisibleForTesting;
+import 
org.apache.hadoop.hdds.scm.server.SCMDatanodeProtocolServer.NodeRegistrationContainerReport;
 import org.apache.hadoop.hdds.server.events.EventQueue;
 import org.apache.hadoop.hdds.server.events.TypedEvent;
 
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
+
 /**
  * Class defining Safe mode exit criteria for Containers.
  */
@@ -128,7 +127,11 @@ public class ContainerSafeModeRule extends
 
   @Override
   public String getStatusText() {
-    return "currentContainerThreshold " + getCurrentContainerThreshold()
-        + " >= safeModeCutoff " + this.safeModeCutoff;
+    return String
+        .format(
+            "%% of containers with at least one reported replica (=%1.2f) >= "
+                + "safeModeCutoff (=%1.2f)",
+            getCurrentContainerThreshold(), this.safeModeCutoff);
   }
+
 }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/DataNodeSafeModeRule.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/DataNodeSafeModeRule.java
index fefe4d4..ea5a78f 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/DataNodeSafeModeRule.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/DataNodeSafeModeRule.java
@@ -82,7 +82,8 @@ public class DataNodeSafeModeRule extends
 
   @Override
   public String getStatusText() {
-    return "registeredDns " + this.registeredDns + " >= requiredDns "
-        + this.requiredDns;
+    return String
+        .format("registered datanodes (=%d) >= required datanodes (=%d)",
+            this.registeredDns, this.requiredDns);
   }
 }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/HealthyPipelineSafeModeRule.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/HealthyPipelineSafeModeRule.java
index b6ab0d0..d8c5778 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/HealthyPipelineSafeModeRule.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/HealthyPipelineSafeModeRule.java
@@ -149,8 +149,9 @@ public class HealthyPipelineSafeModeRule extends 
SafeModeExitRule<Pipeline> {
 
   @Override
   public String getStatusText() {
-    return "currentHealthyPipelineCount " + this.currentHealthyPipelineCount
-        + " >= healthyPipelineThresholdCount "
-        + this.healthyPipelineThresholdCount;
+    return String.format("healthy Ratis/THREE pipelines (=%d) >= "
+            + "healthyPipelineThresholdCount (=%d)",
+        this.currentHealthyPipelineCount,
+        this.healthyPipelineThresholdCount);
   }
 }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/OneReplicaPipelineSafeModeRule.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/OneReplicaPipelineSafeModeRule.java
index e243622..5268bc9 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/OneReplicaPipelineSafeModeRule.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/safemode/OneReplicaPipelineSafeModeRule.java
@@ -17,10 +17,12 @@
 
 package org.apache.hadoop.hdds.scm.safemode;
 
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-import org.apache.hadoop.hdds.conf.ConfigurationSource;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 import org.apache.hadoop.hdds.HddsConfigKeys;
+import org.apache.hadoop.hdds.conf.ConfigurationSource;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.PipelineReport;
 import org.apache.hadoop.hdds.scm.events.SCMEvents;
@@ -31,13 +33,12 @@ import 
org.apache.hadoop.hdds.scm.pipeline.PipelineNotFoundException;
 import 
org.apache.hadoop.hdds.scm.server.SCMDatanodeHeartbeatDispatcher.PipelineReportFromDatanode;
 import org.apache.hadoop.hdds.server.events.EventQueue;
 import org.apache.hadoop.hdds.server.events.TypedEvent;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.HashSet;
-import java.util.Set;
-import java.util.stream.Collectors;
-
 /**
  * This rule covers whether we have at least one datanode is reported for each
  * open pipeline. This rule is for all open containers, we have at least one
@@ -149,8 +150,11 @@ public class OneReplicaPipelineSafeModeRule extends
 
   @Override
   public String getStatusText() {
-    return "currentReportedPipelineCount "
-        + this.currentReportedPipelineCount + " >= thresholdCount "
-        + this.thresholdCount;
+    return String
+        .format(
+            "reported Ratis/THREE pipelines with at least one datanode (=%d) "
+                + ">= threshold (=%d)",
+            this.currentReportedPipelineCount,
+            this.thresholdCount);
   }
 }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java
index f10a544..6e6d440 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/SCMMXBean.java
@@ -18,11 +18,11 @@
 
 package org.apache.hadoop.hdds.scm.server;
 
+import java.util.Map;
+
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
 import org.apache.hadoop.hdds.server.ServiceRuntimeInfo;
 
-import java.util.Map;
-
 /**
  *
  * This is the JMX management interface for scm information.
@@ -65,7 +65,7 @@ public interface SCMMXBean extends ServiceRuntimeInfo {
    */
   Map<String, Integer> getContainerStateCount();
 
-  Map<String, String> getRuleStatusMetrics();
+  Map<String, String[]> getSafeModeRuleStatus();
 
   String getScmId();
 
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
index c7e54bc..3cb070c 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/server/StorageContainerManager.java
@@ -34,7 +34,6 @@ import java.util.Objects;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.commons.lang3.tuple.Pair;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hdds.HddsUtils;
 import org.apache.hadoop.hdds.annotation.InterfaceAudience;
@@ -118,6 +117,7 @@ import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.RemovalListener;
 import com.google.protobuf.BlockingService;
+import org.apache.commons.lang3.tuple.Pair;
 import static 
org.apache.hadoop.hdds.scm.ScmConfigKeys.HDDS_SCM_WATCHER_TIMEOUT_DEFAULT;
 import org.apache.ratis.grpc.GrpcTlsConfig;
 import org.slf4j.Logger;
@@ -1147,11 +1147,13 @@ public final class StorageContainerManager extends 
ServiceRuntimeInfoImpl
   }
 
   @Override
-  public Map<String, String> getRuleStatusMetrics() {
-    Map<String, String> map = new HashMap<>();
+  public Map<String, String[]> getSafeModeRuleStatus() {
+    Map<String, String[]> map = new HashMap<>();
     for (Map.Entry<String, Pair<Boolean, String>> entry :
         scmSafeModeManager.getRuleStatus().entrySet()) {
-      map.put(entry.getKey(), entry.getValue().getRight());
+      String[] status =
+          {entry.getValue().getRight(), entry.getValue().getLeft().toString()};
+      map.put(entry.getKey(), status);
     }
     return map;
   }
diff --git 
a/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html 
b/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html
index 4e900bb..a6f4fdf 100644
--- a/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html
+++ b/hadoop-hdds/server-scm/src/main/resources/webapps/scm/scm-overview.html
@@ -60,10 +60,18 @@
 <h2>Safemode rules statuses</h2>
 
 <table class="table table-bordered table-striped" class="col-md-6">
+    <thead>
+    <tr>
+        <th>Rule Id</th>
+        <th>Rule definition</th>
+        <th>Passed</th>
+    </tr>
+    </thead>
     <tbody>
-    <tr ng-repeat="typestat in $ctrl.overview.jmx.RuleStatusMetrics">
+    <tr ng-repeat="typestat in $ctrl.overview.jmx.SafeModeRuleStatus">
         <td>{{typestat.key}}</td>
-        <td>{{typestat.value}}</td>
+        <td>{{typestat.value[0]}}</td>
+        <td>{{typestat.value[1]}}</td>
     </tr>
     </tbody>
 </table>
\ No newline at end of file


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to