Merge "Don't fail metric computation due to duplicated metric names" into stable-3.5
diff --git a/java/com/google/gerrit/metrics/dropwizard/BUILD b/java/com/google/gerrit/metrics/dropwizard/BUILD
index 4b3859f..dbb8f5e 100644
--- a/java/com/google/gerrit/metrics/dropwizard/BUILD
+++ b/java/com/google/gerrit/metrics/dropwizard/BUILD
@@ -12,6 +12,7 @@
"//lib:args4j",
"//lib:guava",
"//lib/dropwizard:dropwizard-core",
+ "//lib/flogger:api",
"//lib/guice",
],
)
diff --git a/java/com/google/gerrit/metrics/dropwizard/BucketedCallback.java b/java/com/google/gerrit/metrics/dropwizard/BucketedCallback.java
index b3860f7..da9ec70 100644
--- a/java/com/google/gerrit/metrics/dropwizard/BucketedCallback.java
+++ b/java/com/google/gerrit/metrics/dropwizard/BucketedCallback.java
@@ -110,7 +110,7 @@
}
}
- private String submetric(Object key) {
+ String submetric(Object key) {
return DropWizardMetricMaker.name(ordering, name, name(key));
}
diff --git a/java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl1.java b/java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl1.java
index d718035..bd3caf9 100644
--- a/java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl1.java
+++ b/java/com/google/gerrit/metrics/dropwizard/CallbackMetricImpl1.java
@@ -15,13 +15,17 @@
package com.google.gerrit.metrics.dropwizard;
import com.codahale.metrics.MetricRegistry;
+import com.google.common.flogger.FluentLogger;
import com.google.gerrit.metrics.CallbackMetric1;
import com.google.gerrit.metrics.Description;
import com.google.gerrit.metrics.Field;
+import java.util.concurrent.TimeUnit;
import java.util.function.Function;
/** Optimized version of {@link BucketedCallback} for single dimension. */
class CallbackMetricImpl1<F1, V> extends BucketedCallback<V> {
+ private static final FluentLogger logger = FluentLogger.forEnclosingClass();
+
CallbackMetricImpl1(
DropWizardMetricMaker metrics,
MetricRegistry registry,
@@ -44,9 +48,14 @@
@Override
public void set(F1 field1, V value) {
- BucketedCallback<V>.ValueGauge cell = getOrCreate(field1);
- cell.value = value;
- cell.set = true;
+ try {
+ BucketedCallback<V>.ValueGauge cell = getOrCreate(field1);
+ cell.value = value;
+ cell.set = true;
+ } catch (IllegalArgumentException e) {
+ logger.atWarning().withCause(e).atMostEvery(1, TimeUnit.HOURS).log(
+ "Unable to register duplicate metric: %s", submetric(field1));
+ }
}
@Override