HADOOP-12348. MetricsSystemImpl creates MetricsSourceAdapter with wrong time unit parameter. (zxu via rkanter)

This commit is contained in:
Robert Kanter 2015-09-11 15:21:22 -07:00
parent 50a367da20
commit 764f8baa99
4 changed files with 29 additions and 11 deletions

View File

@ -539,6 +539,9 @@ Release 2.8.0 - UNRELEASED
HADOOP-11797. releasedocmaker.py needs to put ASF headers on output (aw) HADOOP-11797. releasedocmaker.py needs to put ASF headers on output (aw)
HADOOP-12348. MetricsSystemImpl creates MetricsSourceAdapter with wrong
time unit parameter. (zxu via rkanter)
OPTIMIZATIONS OPTIMIZATIONS
HADOOP-12051. ProtobufRpcEngine.invoke() should use Exception.toString() HADOOP-12051. ProtobufRpcEngine.invoke() should use Exception.toString()

View File

@ -61,7 +61,7 @@ class MetricsSourceAdapter implements DynamicMBean {
private Iterable<MetricsRecordImpl> lastRecs; private Iterable<MetricsRecordImpl> lastRecs;
private long jmxCacheTS = 0; private long jmxCacheTS = 0;
private int jmxCacheTTL; private long jmxCacheTTL;
private MBeanInfo infoCache; private MBeanInfo infoCache;
private ObjectName mbeanName; private ObjectName mbeanName;
private final boolean startMBeans; private final boolean startMBeans;
@ -69,7 +69,7 @@ class MetricsSourceAdapter implements DynamicMBean {
MetricsSourceAdapter(String prefix, String name, String description, MetricsSourceAdapter(String prefix, String name, String description,
MetricsSource source, Iterable<MetricsTag> injectedTags, MetricsSource source, Iterable<MetricsTag> injectedTags,
MetricsFilter recordFilter, MetricsFilter metricFilter, MetricsFilter recordFilter, MetricsFilter metricFilter,
int jmxCacheTTL, boolean startMBeans) { long jmxCacheTTL, boolean startMBeans) {
this.prefix = checkNotNull(prefix, "prefix"); this.prefix = checkNotNull(prefix, "prefix");
this.name = checkNotNull(name, "name"); this.name = checkNotNull(name, "name");
this.source = checkNotNull(source, "source"); this.source = checkNotNull(source, "source");
@ -84,7 +84,7 @@ class MetricsSourceAdapter implements DynamicMBean {
MetricsSourceAdapter(String prefix, String name, String description, MetricsSourceAdapter(String prefix, String name, String description,
MetricsSource source, Iterable<MetricsTag> injectedTags, MetricsSource source, Iterable<MetricsTag> injectedTags,
int period, MetricsConfig conf) { long period, MetricsConfig conf) {
this(prefix, name, description, source, injectedTags, this(prefix, name, description, source, injectedTags,
conf.getFilter(RECORD_FILTER_KEY), conf.getFilter(RECORD_FILTER_KEY),
conf.getFilter(METRIC_FILTER_KEY), conf.getFilter(METRIC_FILTER_KEY),
@ -230,6 +230,10 @@ class MetricsSourceAdapter implements DynamicMBean {
return mbeanName; return mbeanName;
} }
@VisibleForTesting
long getJmxCacheTTL() {
return jmxCacheTTL;
}
private void updateInfoCache() { private void updateInfoCache() {
LOG.debug("Updating info cache..."); LOG.debug("Updating info cache...");

View File

@ -261,11 +261,9 @@ public class MetricsSystemImpl extends MetricsSystem implements MetricsSource {
void registerSource(String name, String desc, MetricsSource source) { void registerSource(String name, String desc, MetricsSource source) {
checkNotNull(config, "config"); checkNotNull(config, "config");
MetricsConfig conf = sourceConfigs.get(name); MetricsConfig conf = sourceConfigs.get(name);
MetricsSourceAdapter sa = conf != null MetricsSourceAdapter sa = new MetricsSourceAdapter(prefix, name, desc,
? new MetricsSourceAdapter(prefix, name, desc, source, source, injectedTags, period * 1000L, conf != null ? conf
injectedTags, period, conf) : config.subset(SOURCE_KEY));
: new MetricsSourceAdapter(prefix, name, desc, source,
injectedTags, period, config.subset(SOURCE_KEY));
sources.put(name, sa); sources.put(name, sa);
sa.start(); sa.start();
LOG.debug("Registered source "+ name); LOG.debug("Registered source "+ name);
@ -362,7 +360,7 @@ public class MetricsSystemImpl extends MetricsSystem implements MetricsSource {
return; return;
} }
logicalTime = 0; logicalTime = 0;
long millis = period * 1000; long millis = period * 1000L;
timer = new Timer("Timer for '"+ prefix +"' metrics system", true); timer = new Timer("Timer for '"+ prefix +"' metrics system", true);
timer.scheduleAtFixedRate(new TimerTask() { timer.scheduleAtFixedRate(new TimerTask() {
public void run() { public void run() {
@ -554,7 +552,7 @@ public class MetricsSystemImpl extends MetricsSystem implements MetricsSource {
private void registerSystemSource() { private void registerSystemSource() {
MetricsConfig sysConf = sourceConfigs.get(MS_NAME); MetricsConfig sysConf = sourceConfigs.get(MS_NAME);
sysSource = new MetricsSourceAdapter(prefix, MS_STATS_NAME, MS_STATS_DESC, sysSource = new MetricsSourceAdapter(prefix, MS_STATS_NAME, MS_STATS_DESC,
MetricsAnnotations.makeSource(this), injectedTags, period, MetricsAnnotations.makeSource(this), injectedTags, period * 1000L,
sysConf == null ? config.subset(SOURCE_KEY) : sysConf); sysConf == null ? config.subset(SOURCE_KEY) : sysConf);
sysSource.start(); sysSource.start();
} }

View File

@ -544,6 +544,19 @@ public class TestMetricsSystemImpl {
} }
} }
@Test
public void testRegisterSourceJmxCacheTTL() {
MetricsSystem ms = new MetricsSystemImpl();
ms.init("TestMetricsSystem");
TestSource ts = new TestSource("ts");
ms.register(ts);
MetricsSourceAdapter sa = ((MetricsSystemImpl) ms)
.getSourceAdapter("TestSource");
assertEquals(MetricsConfig.PERIOD_DEFAULT * 1000 + 1,
sa.getJmxCacheTTL());
ms.shutdown();
}
@Metrics(context="test") @Metrics(context="test")
private static class TestSource { private static class TestSource {
@Metric("C1 desc") MutableCounterLong c1; @Metric("C1 desc") MutableCounterLong c1;