This is an automated email from the ASF dual-hosted git repository. huijun pushed a commit to branch huijunw/healthmgrmetrics in repository https://gitbox.apache.org/repos/asf/incubator-heron.git
The following commit(s) were added to refs/heads/huijunw/healthmgrmetrics by this push: new 6367bdf replace singleton with guice singleton 6367bdf is described below commit 6367bdf1a70e6bd1d2048ead5dab8428eb6f684d Author: Huijun Wu <huij...@twitter.com> AuthorDate: Thu Apr 12 04:02:54 2018 -0700 replace singleton with guice singleton --- .../org/apache/heron/healthmgr/HealthManager.java | 21 +++++++++++++-------- .../heron/healthmgr/HealthManagerMetrics.java | 2 ++ .../healthmgr/detectors/BackPressureDetector.java | 9 ++++++++- .../healthmgr/diagnosers/SlowInstanceDiagnoser.java | 14 +++++++++++--- .../resolvers/RestartContainerResolver.java | 11 ++++++----- .../apache/heron/healthmgr/HealthManagerTest.java | 2 +- 6 files changed, 41 insertions(+), 18 deletions(-) diff --git a/heron/healthmgr/src/java/org/apache/heron/healthmgr/HealthManager.java b/heron/healthmgr/src/java/org/apache/heron/healthmgr/HealthManager.java index 144d0cc..eb422f7 100644 --- a/heron/healthmgr/src/java/org/apache/heron/healthmgr/HealthManager.java +++ b/heron/healthmgr/src/java/org/apache/heron/healthmgr/HealthManager.java @@ -214,22 +214,24 @@ public class HealthManager { String metricsUrl = config.getStringValue(PolicyConfigKey.METRIC_SOURCE_URL.key()); metricsUrl = getOptionValue(cmd, CliArgs.METRIC_SOURCE_URL, metricsUrl); - AbstractModule module = buildMetricsProviderModule(metricsUrl, metricSourceClassName); + // metrics reporting thread + HealthManagerMetrics publishingMetricsRunnable = + new HealthManagerMetrics(Integer.valueOf(getOptionValue(cmd, CliArgs.METRICSMGR_PORT))); + + AbstractModule module + = buildBaseModule(metricsUrl, metricSourceClassName, publishingMetricsRunnable); HealthManager healthManager = new HealthManager(config, module); LOG.info("Initializing health manager"); healthManager.initialize(); - LOG.info("Starting Health Manager metric posting thread"); - HealthManagerMetrics publishingMetricsRunnable = - new HealthManagerMetrics(Integer.valueOf(getOptionValue(cmd, CliArgs.METRICSMGR_PORT))); - SingletonRegistry.INSTANCE.registerSingleton(HealthManagerMetrics.METRICS_THREAD, - publishingMetricsRunnable); - LOG.info("Starting Health Manager"); PoliciesExecutor policyExecutor = new PoliciesExecutor(healthManager.healthPolicies); ScheduledFuture<?> future = policyExecutor.start(); + + LOG.info("Starting Health Manager metric posting thread"); new Thread(publishingMetricsRunnable).start(); + try { future.get(); } finally { @@ -324,7 +326,8 @@ public class HealthManager { } @VisibleForTesting - static AbstractModule buildMetricsProviderModule(final String sourceUrl, final String type) { + static AbstractModule buildBaseModule(final String sourceUrl, final String type, + final HealthManagerMetrics publishingMetricsRunnable) { return new AbstractModule() { @Override protected void configure() { @@ -334,6 +337,8 @@ public class HealthManager { bind(String.class) .annotatedWith(Names.named(CONF_METRICS_SOURCE_TYPE)) .toInstance(type); + bind(HealthManagerMetrics.class) + .toInstance(publishingMetricsRunnable); } }; } diff --git a/heron/healthmgr/src/java/org/apache/heron/healthmgr/HealthManagerMetrics.java b/heron/healthmgr/src/java/org/apache/heron/healthmgr/HealthManagerMetrics.java index 11cd891..1989fec45 100644 --- a/heron/healthmgr/src/java/org/apache/heron/healthmgr/HealthManagerMetrics.java +++ b/heron/healthmgr/src/java/org/apache/heron/healthmgr/HealthManagerMetrics.java @@ -23,6 +23,7 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.inject.Inject; +import javax.inject.Singleton; import com.google.protobuf.Message; @@ -40,6 +41,7 @@ import org.apache.heron.proto.system.Metrics; /** * HealthMgr's metrics to be collect */ +@Singleton public class HealthManagerMetrics implements Runnable, AutoCloseable { public static final String METRICS_THREAD = "HealthManagerMetrics"; private static final Logger LOG = Logger.getLogger(HealthManagerMetrics.class.getName()); diff --git a/heron/healthmgr/src/java/org/apache/heron/healthmgr/detectors/BackPressureDetector.java b/heron/healthmgr/src/java/org/apache/heron/healthmgr/detectors/BackPressureDetector.java index 5fe0824..d9cc7b3 100644 --- a/heron/healthmgr/src/java/org/apache/heron/healthmgr/detectors/BackPressureDetector.java +++ b/heron/healthmgr/src/java/org/apache/heron/healthmgr/detectors/BackPressureDetector.java @@ -28,6 +28,7 @@ import com.microsoft.dhalion.core.Measurement; import com.microsoft.dhalion.core.MeasurementsTable; import com.microsoft.dhalion.core.Symptom; +import org.apache.heron.healthmgr.HealthManagerMetrics; import org.apache.heron.healthmgr.HealthPolicyConfig; import static org.apache.heron.healthmgr.detectors.BaseDetector.SymptomType.SYMPTOM_COMP_BACK_PRESSURE; @@ -35,14 +36,18 @@ import static org.apache.heron.healthmgr.detectors.BaseDetector.SymptomType.SYMP import static org.apache.heron.healthmgr.sensors.BaseSensor.MetricName.METRIC_BACK_PRESSURE; public class BackPressureDetector extends BaseDetector { + public static final String BACK_PRESSURE_DETECTOR = "BackPressureDetector"; static final String CONF_NOISE_FILTER = "BackPressureDetector.noiseFilterMillis"; private static final Logger LOG = Logger.getLogger(BackPressureDetector.class.getName()); private final int noiseFilterMillis; + private HealthManagerMetrics publishingMetricsRunnable; @Inject - BackPressureDetector(HealthPolicyConfig policyConfig) { + BackPressureDetector(HealthPolicyConfig policyConfig, + HealthManagerMetrics publishingMetricsRunnable) { noiseFilterMillis = (int) policyConfig.getConfig(CONF_NOISE_FILTER, 20); + this.publishingMetricsRunnable = publishingMetricsRunnable; } /** @@ -53,6 +58,8 @@ public class BackPressureDetector extends BaseDetector { */ @Override public Collection<Symptom> detect(Collection<Measurement> measurements) { + publishingMetricsRunnable.executeDetectorIncr(BACK_PRESSURE_DETECTOR); + Collection<Symptom> result = new ArrayList<>(); Instant now = context.checkpoint(); diff --git a/heron/healthmgr/src/java/org/apache/heron/healthmgr/diagnosers/SlowInstanceDiagnoser.java b/heron/healthmgr/src/java/org/apache/heron/healthmgr/diagnosers/SlowInstanceDiagnoser.java index 40aa417..df87c3d 100644 --- a/heron/healthmgr/src/java/org/apache/heron/healthmgr/diagnosers/SlowInstanceDiagnoser.java +++ b/heron/healthmgr/src/java/org/apache/heron/healthmgr/diagnosers/SlowInstanceDiagnoser.java @@ -19,6 +19,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.logging.Logger; +import javax.inject.Inject; + import com.microsoft.dhalion.core.Diagnosis; import com.microsoft.dhalion.core.MeasurementsTable; import com.microsoft.dhalion.core.Symptom; @@ -37,11 +39,17 @@ public class SlowInstanceDiagnoser extends BaseDiagnoser { public static final String SLOW_INSTANCE_DIAGNOSER = "SlowInstanceDiagnoser"; private static final Logger LOG = Logger.getLogger(SlowInstanceDiagnoser.class.getName()); + private HealthManagerMetrics publishingMetricsRunnable; + + @Inject + public SlowInstanceDiagnoser(HealthManagerMetrics publishingMetricsRunnable) { + this.publishingMetricsRunnable = publishingMetricsRunnable; + } + @Override public Collection<Diagnosis> diagnose(Collection<Symptom> symptoms) { - ((HealthManagerMetrics) SingletonRegistry.INSTANCE - .getSingleton(HealthManagerMetrics.METRICS_THREAD)) - .executeDiagnoserIncr(SLOW_INSTANCE_DIAGNOSER); + publishingMetricsRunnable.executeDiagnoserIncr(SLOW_INSTANCE_DIAGNOSER); + Collection<Diagnosis> diagnoses = new ArrayList<>(); SymptomsTable symptomsTable = SymptomsTable.of(symptoms); diff --git a/heron/healthmgr/src/java/org/apache/heron/healthmgr/resolvers/RestartContainerResolver.java b/heron/healthmgr/src/java/org/apache/heron/healthmgr/resolvers/RestartContainerResolver.java index a1354c5..cdbb85e 100644 --- a/heron/healthmgr/src/java/org/apache/heron/healthmgr/resolvers/RestartContainerResolver.java +++ b/heron/healthmgr/src/java/org/apache/heron/healthmgr/resolvers/RestartContainerResolver.java @@ -47,14 +47,17 @@ public class RestartContainerResolver implements IResolver { private final String topologyName; private final ISchedulerClient schedulerClient; private ExecutionContext context; + private HealthManagerMetrics publishingMetricsRunnable; @Inject public RestartContainerResolver(@Named(CONF_TOPOLOGY_NAME) String topologyName, EventManager eventManager, - ISchedulerClient schedulerClient) { + ISchedulerClient schedulerClient, + HealthManagerMetrics publishingMetricsRunnable) { this.topologyName = topologyName; this.eventManager = eventManager; this.schedulerClient = schedulerClient; + this.publishingMetricsRunnable = publishingMetricsRunnable; } @Override @@ -64,9 +67,7 @@ public class RestartContainerResolver implements IResolver { @Override public Collection<Action> resolve(Collection<Diagnosis> diagnosis) { - HealthManagerMetrics hmm = (HealthManagerMetrics) SingletonRegistry.INSTANCE - .getSingleton(HealthManagerMetrics.METRICS_THREAD); - hmm.executeResolver(RESTART_CONTAINER_RESOLVER); + publishingMetricsRunnable.executeResolver(RESTART_CONTAINER_RESOLVER); List<Action> actions = new ArrayList<>(); @@ -104,7 +105,7 @@ public class RestartContainerResolver implements IResolver { .setTopologyName(topologyName) .build()); LOG.info("Restarted container result: " + b); - hmm.executeIncr("RestartContainer"); + publishingMetricsRunnable.executeIncr("RestartContainer"); }); LOG.info("Broadcasting container restart event"); diff --git a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/HealthManagerTest.java b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/HealthManagerTest.java index 2fa1e7e..3711e6c 100644 --- a/heron/healthmgr/tests/java/org/apache/heron/healthmgr/HealthManagerTest.java +++ b/heron/healthmgr/tests/java/org/apache/heron/healthmgr/HealthManagerTest.java @@ -64,7 +64,7 @@ public class HealthManagerTest { when(adaptor.getSchedulerLocation(anyString())).thenReturn(schedulerLocation); AbstractModule baseModule = HealthManager - .buildMetricsProviderModule("127.0.0.1", TrackerMetricsProvider.class.getName()); + .buildBaseModule("127.0.0.1", TrackerMetricsProvider.class.getName()); HealthManager healthManager = new HealthManager(config, baseModule); -- To stop receiving notification emails like this one, please contact hui...@apache.org.