diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 97920759b91..cadb0b68cd3 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -589,6 +589,8 @@ Release 2.6.0 - UNRELEASED HADOOP-11117 UGI HadoopLoginModule doesn't catch & wrap all kerberos-related exceptions (stevel) + HADOOP-11163 MetricsSystemImpl may miss a registered source. (cnauroth) + Release 2.5.1 - 2014-09-05 INCOMPATIBLE CHANGES diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java index 5e6c9aecafb..4507e357957 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/impl/MetricsSystemImpl.java @@ -234,7 +234,7 @@ T register(String name, String desc, T source) { } // We want to re-register the source to pick up new config when the // metrics system restarts. - register(name, new AbstractCallback() { + register(finalName, new AbstractCallback() { @Override public void postStart() { registerSource(finalName, finalDesc, s); } diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java index 0122045d383..d59e80b5820 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/metrics2/impl/TestMetricsSystemImpl.java @@ -397,6 +397,24 @@ public void flush() { ms.shutdown(); } + @Test public void testRegisterSourceWithoutName() { + MetricsSystem ms = new MetricsSystemImpl(); + TestSource ts = new TestSource("ts"); + TestSource2 ts2 = new TestSource2("ts2"); + ms.register(ts); + ms.register(ts2); + ms.init("TestMetricsSystem"); + // if metrics source is registered without name, + // the class name will be used as the name + MetricsSourceAdapter sa = ((MetricsSystemImpl) ms) + .getSourceAdapter("TestSource"); + assertNotNull(sa); + MetricsSourceAdapter sa2 = ((MetricsSystemImpl) ms) + .getSourceAdapter("TestSource2"); + assertNotNull(sa2); + ms.shutdown(); + } + private void checkMetricsRecords(List recs) { LOG.debug(recs); MetricsRecord r = recs.get(0); @@ -430,6 +448,20 @@ private static class TestSource { } } + @Metrics(context="test") + private static class TestSource2 { + @Metric("C1 desc") MutableCounterLong c1; + @Metric("XXX desc") MutableCounterLong xxx; + @Metric("G1 desc") MutableGaugeLong g1; + @Metric("YYY desc") MutableGaugeLong yyy; + @Metric MutableRate s1; + final MetricsRegistry registry; + + TestSource2(String recName) { + registry = new MetricsRegistry(recName); + } + } + private static String getPluginUrlsAsString() { return "file:metrics2-test-plugin.jar"; }