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;
+ }
+ }
}