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]