This is an automated email from the ASF dual-hosted git repository.
dlmarion pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/main by this push:
new 1f62db44b1 Emit metrics from Manager for goal state (#6080)
1f62db44b1 is described below
commit 1f62db44b19d6a1810cfb7785e44b364d3b4f45b
Author: Dave Marion <[email protected]>
AuthorDate: Wed Jan 28 14:47:31 2026 -0500
Emit metrics from Manager for goal state (#6080)
Added a Metric for the Manager goal state
Co-authored-by: Dom G. <[email protected]>
---
.../main/java/org/apache/accumulo/core/metrics/Metric.java | 3 +++
.../src/main/java/org/apache/accumulo/manager/Manager.java | 11 +++++++++--
.../apache/accumulo/manager/metrics/ManagerMetrics.java | 14 ++++++++++++++
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/core/src/main/java/org/apache/accumulo/core/metrics/Metric.java
b/core/src/main/java/org/apache/accumulo/core/metrics/Metric.java
index 8fefa5d76a..fe8bf1fd76 100644
--- a/core/src/main/java/org/apache/accumulo/core/metrics/Metric.java
+++ b/core/src/main/java/org/apache/accumulo/core/metrics/Metric.java
@@ -303,6 +303,9 @@ public enum Metric {
MetricDocSection.MANAGER),
MANAGER_USER_TGW_ERRORS("accumulo.tabletmgmt.user.errors", MetricType.GAUGE,
"Error count encountered by the TabletGroupWatcher for the USER data
level.",
+ MetricDocSection.MANAGER),
+ MANAGER_GOAL_STATE("accumulo.manager.goal.state", MetricType.GAUGE,
+ "Manager goal state: -1=unknown, 0=CLEAN_STOP, 1=SAFE_MODE, 2=NORMAL.",
MetricDocSection.MANAGER);
private final String name;
diff --git
a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
index 99c9feee57..72a9c0e687 100644
--- a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
+++ b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
@@ -206,6 +206,8 @@ public class Manager extends AbstractServer implements
LiveTServerSet.Listener,
private final AtomicReference<Map<FateInstanceType,Fate<FateEnv>>> fateRefs =
new AtomicReference<>();
+ private final ManagerMetrics managerMetrics = new ManagerMetrics();
+
static class TServerStatus {
// This is the set of tservers that an attempt to gather status from was
made
final LiveTServersSnapshot snapshot;
@@ -540,7 +542,13 @@ public class Manager extends AbstractServer implements
LiveTServerSet.Listener,
try {
byte[] data =
getContext().getZooSession().asReaderWriter().getData(Constants.ZMANAGER_GOAL_STATE);
- return ManagerGoalState.valueOf(new String(data, UTF_8));
+ ManagerGoalState goal = ManagerGoalState.valueOf(new String(data,
UTF_8));
+ try {
+ managerMetrics.updateManagerGoalState(goal);
+ } catch (IllegalStateException e) {
+ log.warn("Error updating goal state metric", e);
+ }
+ return goal;
} catch (Exception e) {
log.error("Problem getting real goal state from zookeeper: ", e);
sleepUninterruptibly(1, SECONDS);
@@ -989,7 +997,6 @@ public class Manager extends AbstractServer implements
LiveTServerSet.Listener,
}
MetricsInfo metricsInfo = getContext().getMetricsInfo();
- ManagerMetrics managerMetrics = new ManagerMetrics();
List<MetricsProducer> producers = new ArrayList<>();
producers.add(balanceManager.getMetrics());
diff --git
a/server/manager/src/main/java/org/apache/accumulo/manager/metrics/ManagerMetrics.java
b/server/manager/src/main/java/org/apache/accumulo/manager/metrics/ManagerMetrics.java
index cc8c33bc89..77689cea02 100644
---
a/server/manager/src/main/java/org/apache/accumulo/manager/metrics/ManagerMetrics.java
+++
b/server/manager/src/main/java/org/apache/accumulo/manager/metrics/ManagerMetrics.java
@@ -20,6 +20,7 @@ package org.apache.accumulo.manager.metrics;
import static java.util.Objects.requireNonNull;
import static org.apache.accumulo.core.metrics.Metric.COMPACTION_SVC_ERRORS;
+import static org.apache.accumulo.core.metrics.Metric.MANAGER_GOAL_STATE;
import static org.apache.accumulo.core.metrics.Metric.MANAGER_META_TGW_ERRORS;
import static org.apache.accumulo.core.metrics.Metric.MANAGER_ROOT_TGW_ERRORS;
import static org.apache.accumulo.core.metrics.Metric.MANAGER_USER_TGW_ERRORS;
@@ -34,6 +35,7 @@ import org.apache.accumulo.core.conf.AccumuloConfiguration;
import org.apache.accumulo.core.conf.Property;
import org.apache.accumulo.core.fate.Fate;
import org.apache.accumulo.core.fate.FateInstanceType;
+import org.apache.accumulo.core.manager.thrift.ManagerGoalState;
import org.apache.accumulo.core.metadata.schema.Ample.DataLevel;
import org.apache.accumulo.core.metrics.MetricsProducer;
import org.apache.accumulo.manager.Manager;
@@ -53,6 +55,16 @@ public class ManagerMetrics implements MetricsProducer {
private final AtomicLong metadataTGWErrorsGauge = new AtomicLong(0);
private final AtomicLong userTGWErrorsGauge = new AtomicLong(0);
private final AtomicInteger compactionConfigurationError = new
AtomicInteger(0);
+ private final AtomicInteger goalState = new AtomicInteger(-1);
+
+ public void updateManagerGoalState(ManagerGoalState goal) {
+ int newValue = switch (goal) {
+ case CLEAN_STOP -> 0;
+ case SAFE_MODE -> 1;
+ case NORMAL -> 2;
+ };
+ goalState.set(newValue);
+ }
public void configureFateMetrics(final AccumuloConfiguration conf, final
Manager manager,
Map<FateInstanceType,Fate<FateEnv>> fateRefs) {
@@ -102,6 +114,8 @@ public class ManagerMetrics implements MetricsProducer {
.description(MANAGER_USER_TGW_ERRORS.getDescription()).register(registry);
Gauge.builder(COMPACTION_SVC_ERRORS.getName(),
compactionConfigurationError, AtomicInteger::get)
.description(COMPACTION_SVC_ERRORS.getDescription()).register(registry);
+ Gauge.builder(MANAGER_GOAL_STATE.getName(), goalState, AtomicInteger::get)
+ .description(MANAGER_GOAL_STATE.getDescription()).register(registry);
}
public List<MetricsProducer> getProducers(Manager manager) {