From e38d4ad1057d6283d48ce9cef3db9371eb11eeee Mon Sep 17 00:00:00 2001 From: jon-wei Date: Wed, 21 Feb 2018 17:44:42 -0800 Subject: [PATCH 1/2] Automatically adjust com.metamx.metrics monitor class references --- .../druid/server/metrics/MonitorsConfig.java | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java b/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java index 17b03b646d25..d320bc59cb09 100644 --- a/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java +++ b/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java @@ -37,15 +37,33 @@ public class MonitorsConfig { public static final String METRIC_DIMENSION_PREFIX = "druid.metrics.emitter.dimension."; + /** + * Prior to 0.12.0, Druid used Monitor classes from the `com.metamx.metrics` package. + * In 0.12.0, these Monitor classes were moved into Druid under `io.druid.java.util.metrics`. + * See https://github.com/druid-io/druid/pull/5289 for details. + * + * We automatically adjust old `com.metamx.metrics` package references to `io.druid.java.util.metrics` + * for backwards compatibility purposes, easing the upgrade process for users. + */ + public static final String OLD_METAMX_PACKAGE_NAME = "com.metamx.metrics"; + public static final String NEW_DRUID_PACKAGE_NAME = "io.druid.java.util.metrics"; + @JsonProperty("monitors") @NotNull - private List> monitors = Lists.newArrayList(); + private List> monitors; public List> getMonitors() { return monitors; } + public MonitorsConfig( + @JsonProperty("monitors") List monitorNames + ) + { + monitors = getMonitorsFromNames(monitorNames); + } + @Override public String toString() { @@ -54,7 +72,6 @@ public String toString() '}'; } - public static Map mapOfDatasourceAndTaskID( final String datasource, final String taskId @@ -86,4 +103,23 @@ public static Map extractDimensions(Properties props, List> getMonitorsFromNames(List monitorNames) + { + List> monitors = Lists.newArrayList(); + if (monitorNames == null) { + return monitors; + } + try { + for (String monitorName : monitorNames) { + String effectiveMonitorName = monitorName.replace(OLD_METAMX_PACKAGE_NAME, NEW_DRUID_PACKAGE_NAME); + Class monitorClass = (Class) Class.forName(effectiveMonitorName); + monitors.add(monitorClass); + } + return monitors; + } + catch (ClassNotFoundException cnfe) { + throw new RuntimeException(cnfe); + } + } } From bf99174720eea385a290139a6d206c5b3a0a33a6 Mon Sep 17 00:00:00 2001 From: jon-wei Date: Wed, 21 Feb 2018 18:41:13 -0800 Subject: [PATCH 2/2] Log warning for old class names --- .../java/io/druid/server/metrics/MonitorsConfig.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java b/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java index d320bc59cb09..05ccdc8a03fe 100644 --- a/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java +++ b/server/src/main/java/io/druid/server/metrics/MonitorsConfig.java @@ -22,6 +22,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; +import io.druid.java.util.common.logger.Logger; import io.druid.java.util.metrics.Monitor; import io.druid.query.DruidMetrics; @@ -35,6 +36,8 @@ */ public class MonitorsConfig { + private static final Logger log = new Logger(MonitorsConfig.class); + public static final String METRIC_DIMENSION_PREFIX = "druid.metrics.emitter.dimension."; /** @@ -113,6 +116,14 @@ private static List> getMonitorsFromNames(List try { for (String monitorName : monitorNames) { String effectiveMonitorName = monitorName.replace(OLD_METAMX_PACKAGE_NAME, NEW_DRUID_PACKAGE_NAME); + if (!effectiveMonitorName.equals(monitorName)) { + log.warn( + "Deprecated Monitor class name [%s] found, please use package %s instead of %s", + monitorName, + NEW_DRUID_PACKAGE_NAME, + OLD_METAMX_PACKAGE_NAME + ); + } Class monitorClass = (Class) Class.forName(effectiveMonitorName); monitors.add(monitorClass); }