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

suvasude pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-gobblin.git


The following commit(s) were added to refs/heads/master by this push:
     new a580d6e  [GOBBLIN-1051] Emit Helix Leader Metrics
a580d6e is described below

commit a580d6e4beb0ea53e7971caa489f1fe508159ec2
Author: welin <[email protected]>
AuthorDate: Wed Feb 19 09:40:23 2020 -0800

    [GOBBLIN-1051] Emit Helix Leader Metrics
    
    Closes #2891 from linweihs/helix
---
 .../apache/gobblin/metrics/ServiceMetricNames.java |  2 +
 .../modules/core/GobblinServiceManager.java        | 58 ++++++++++++++++++++--
 2 files changed, 56 insertions(+), 4 deletions(-)

diff --git 
a/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/ServiceMetricNames.java
 
b/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/ServiceMetricNames.java
index 9e79c61..bf69c8b 100644
--- 
a/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/ServiceMetricNames.java
+++ 
b/gobblin-metrics-libs/gobblin-metrics/src/main/java/org/apache/gobblin/metrics/ServiceMetricNames.java
@@ -39,4 +39,6 @@ public class ServiceMetricNames {
   public static final String RUNNING_FLOWS_COUNTER = "RunningFlows";
   public static final String SERVICE_USERS = "ServiceUsers";
   public static final String COMPILED = "Compiled";
+
+  public static final String HELIX_LEADER_STATE = "HelixLeaderState";
 }
diff --git 
a/gobblin-service/src/main/java/org/apache/gobblin/service/modules/core/GobblinServiceManager.java
 
b/gobblin-service/src/main/java/org/apache/gobblin/service/modules/core/GobblinServiceManager.java
index 5cd3bc2..01bdb4d 100644
--- 
a/gobblin-service/src/main/java/org/apache/gobblin/service/modules/core/GobblinServiceManager.java
+++ 
b/gobblin-service/src/main/java/org/apache/gobblin/service/modules/core/GobblinServiceManager.java
@@ -17,6 +17,9 @@
 
 package org.apache.gobblin.service.modules.core;
 
+import lombok.Getter;
+import lombok.Setter;
+
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
@@ -25,6 +28,9 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.DefaultParser;
 import org.apache.commons.cli.HelpFormatter;
@@ -38,9 +44,8 @@ import org.apache.helix.ControllerChangeListener;
 import org.apache.helix.HelixManager;
 import org.apache.helix.NotificationContext;
 import org.apache.helix.model.Message;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
+import com.codahale.metrics.MetricRegistry;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Optional;
 import com.google.common.base.Throwables;
@@ -59,14 +64,15 @@ import com.linkedin.restli.server.resources.BaseResource;
 import com.typesafe.config.Config;
 import com.typesafe.config.ConfigFactory;
 
-import lombok.Getter;
-
 import org.apache.gobblin.annotation.Alpha;
 import org.apache.gobblin.configuration.ConfigurationKeys;
 import org.apache.gobblin.instrumented.Instrumented;
 import org.apache.gobblin.instrumented.StandardMetricsBridge;
+import org.apache.gobblin.metrics.ContextAwareGauge;
 import org.apache.gobblin.metrics.ContextAwareHistogram;
 import org.apache.gobblin.metrics.MetricContext;
+import org.apache.gobblin.metrics.ServiceMetricNames;
+import org.apache.gobblin.metrics.reporter.util.MetricReportUtils;
 import org.apache.gobblin.restli.EmbeddedRestliServer;
 import org.apache.gobblin.runtime.api.TopologySpec;
 import org.apache.gobblin.runtime.app.ApplicationException;
@@ -161,6 +167,9 @@ public class GobblinServiceManager implements 
ApplicationLauncher, StandardMetri
 
   protected KafkaJobStatusMonitor jobStatusMonitor;
 
+  protected Optional<HelixLeaderState> helixLeaderGauges;
+
+
   @Getter
   protected Config config;
   private final MetricContext metricContext;
@@ -214,6 +223,14 @@ public class GobblinServiceManager implements 
ApplicationLauncher, StandardMetri
       this.isGitConfigMonitorEnabled = false;
     }
 
+    // Initialize Helix leader guage
+    helixLeaderGauges = Optional.of(new HelixLeaderState());
+    String helixLeaderStateGaugeName =
+        MetricRegistry.name(MetricReportUtils.GOBBLIN_SERVICE_METRICS_PREFIX, 
ServiceMetricNames.HELIX_LEADER_STATE);
+    ContextAwareGauge<Integer> gauge = 
metricContext.newContextAwareGauge(helixLeaderStateGaugeName, () -> 
helixLeaderGauges.get().state.getValue());
+    metricContext.register(helixLeaderStateGaugeName, gauge);
+
+
     // Initialize Helix
     Optional<String> zkConnectionString = 
Optional.fromNullable(ConfigUtils.getString(config,
         ServiceConfigKeys.ZK_CONNECTION_STRING_KEY, null));
@@ -390,6 +407,10 @@ public class GobblinServiceManager implements 
ApplicationLauncher, StandardMetri
         this.scheduler.setActive(true);
       }
 
+      if (helixLeaderGauges.isPresent()) {
+        helixLeaderGauges.get().setState(LeaderState.MASTER);
+      }
+
       if (this.isGitConfigMonitorEnabled) {
         this.gitConfigMonitor.setActive(true);
       }
@@ -409,6 +430,10 @@ public class GobblinServiceManager implements 
ApplicationLauncher, StandardMetri
         this.scheduler.setActive(false);
       }
 
+      if (helixLeaderGauges.isPresent()) {
+        helixLeaderGauges.get().setState(LeaderState.SLAVE);
+      }
+
       if (this.isGitConfigMonitorEnabled) {
         this.gitConfigMonitor.setActive(false);
       }
@@ -439,6 +464,7 @@ public class GobblinServiceManager implements 
ApplicationLauncher, StandardMetri
         }
       });
 
+
       // Update for first time since there might be no notification
       if (helixManager.get().isLeader()) {
         if (this.isSchedulerEnabled) {
@@ -450,10 +476,17 @@ public class GobblinServiceManager implements 
ApplicationLauncher, StandardMetri
           this.gitConfigMonitor.setActive(true);
         }
 
+        if (helixLeaderGauges.isPresent()) {
+          helixLeaderGauges.get().setState(LeaderState.MASTER);
+        }
+
       } else {
         if (this.isSchedulerEnabled) {
           LOGGER.info("[Init] Gobblin Service is running in slave instance 
mode, not enabling Scheduler.");
         }
+        if (helixLeaderGauges.isPresent()) {
+          helixLeaderGauges.get().setState(LeaderState.SLAVE);
+        }
       }
     } else {
       // No Helix manager, hence standalone service instance
@@ -645,4 +678,21 @@ public class GobblinServiceManager implements 
ApplicationLauncher, StandardMetri
       throw new RuntimeException(e);
     }
   }
+
+  @Setter
+  private static class HelixLeaderState {
+    private LeaderState state = LeaderState.UNKNOWN;
+  }
+
+  private enum LeaderState {
+    UNKNOWN(-1),
+    SLAVE(0),
+    MASTER(1);
+
+    @Getter private int value;
+
+    LeaderState(int value) {
+      this.value = value;
+    }
+  }
 }

Reply via email to