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) {

Reply via email to