This is an automated email from the ASF dual-hosted git repository. jlli pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push: new d6bb2c9 Override equals and hashCode methods for PinotMetricName (#6622) d6bb2c9 is described below commit d6bb2c9fedf932223e5cf7aacbab60c768104aa6 Author: Jialiang Li <j...@linkedin.com> AuthorDate: Sun Feb 28 15:33:28 2021 -0800 Override equals and hashCode methods for PinotMetricName (#6622) Co-authored-by: Jack Li(Analytics Engineering) <j...@jlli-mn1.linkedin.biz> --- .../common/metrics/yammer/YammerMetricName.java | 25 +++++++++++++++++++++- .../pinot/common/metrics/MetricsHelperTest.java | 12 +++++++++++ .../apache/pinot/spi/metrics/PinotMetricName.java | 15 +++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/pinot-common/src/main/java/org/apache/pinot/common/metrics/yammer/YammerMetricName.java b/pinot-common/src/main/java/org/apache/pinot/common/metrics/yammer/YammerMetricName.java index 70726c0..fc21012 100644 --- a/pinot-common/src/main/java/org/apache/pinot/common/metrics/yammer/YammerMetricName.java +++ b/pinot-common/src/main/java/org/apache/pinot/common/metrics/yammer/YammerMetricName.java @@ -23,7 +23,7 @@ import org.apache.pinot.spi.metrics.PinotMetricName; public class YammerMetricName implements PinotMetricName { - private MetricName _metricName; + private final MetricName _metricName; public YammerMetricName(Class<?> klass, String name) { _metricName = new MetricName(klass, name); @@ -37,4 +37,27 @@ public class YammerMetricName implements PinotMetricName { public MetricName getMetricName() { return _metricName; } + + /** + * Overrides equals method by calling the equals from the actual metric name. + */ + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + YammerMetricName that = (YammerMetricName) obj; + return _metricName.equals(that._metricName); + } + + /** + * Overrides hashCode method by calling the hashCode method from the actual metric name. + */ + @Override + public int hashCode() { + return _metricName.hashCode(); + } } diff --git a/pinot-common/src/test/java/org/apache/pinot/common/metrics/MetricsHelperTest.java b/pinot-common/src/test/java/org/apache/pinot/common/metrics/MetricsHelperTest.java index 24507c9..ea70bd6 100644 --- a/pinot-common/src/test/java/org/apache/pinot/common/metrics/MetricsHelperTest.java +++ b/pinot-common/src/test/java/org/apache/pinot/common/metrics/MetricsHelperTest.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import org.apache.pinot.common.exception.InvalidConfigException; import org.apache.pinot.spi.metrics.PinotMeter; +import org.apache.pinot.spi.metrics.PinotMetricName; import org.apache.pinot.spi.metrics.PinotMetricsRegistry; import org.apache.pinot.spi.env.PinotConfiguration; import org.testng.Assert; @@ -88,4 +89,15 @@ public class MetricsHelperTest { pinotMeter.mark(2L); Assert.assertEquals(pinotMeter.count(), 3L); } + + @Test + public void testPinotMetricName() { + PinotMetricName testMetricName1 = + PinotMetricUtils.generatePinotMetricName(MetricsHelperTest.class, "testMetricName"); + PinotMetricName testMetricName2 = + PinotMetricUtils.generatePinotMetricName(MetricsHelperTest.class, "testMetricName"); + Assert.assertNotNull(testMetricName1); + Assert.assertNotNull(testMetricName2); + Assert.assertEquals(testMetricName1, testMetricName2); + } } diff --git a/pinot-spi/src/main/java/org/apache/pinot/spi/metrics/PinotMetricName.java b/pinot-spi/src/main/java/org/apache/pinot/spi/metrics/PinotMetricName.java index 95c52b2..e4de876 100644 --- a/pinot-spi/src/main/java/org/apache/pinot/spi/metrics/PinotMetricName.java +++ b/pinot-spi/src/main/java/org/apache/pinot/spi/metrics/PinotMetricName.java @@ -23,5 +23,20 @@ package org.apache.pinot.spi.metrics; */ public interface PinotMetricName { + /** + * Returns the actual metric name. + */ Object getMetricName(); + + /** + * Overrides the equals method. This is needed as {@link PinotMetricName} is used as the key of the key-value pair + * inside the hashmap in MetricsRegistry. Without overriding equals() and hashCode() methods, all the existing k-v pairs + * stored in hashmap cannot be retrieved by initializing a new key. + */ + boolean equals(Object obj); + + /** + * Overrides the hashCode method. This method's contract is the same as equals() method. + */ + int hashCode(); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org