HADOOP-13362. DefaultMetricsSystem leaks the source name when a source unregisters. Contributed by Junping Du

This commit is contained in:
Jason Lowe 2016-07-11 20:58:40 +00:00
parent 830516b8c5
commit 6759cbc56a
4 changed files with 16 additions and 1 deletions

View File

@ -12,6 +12,9 @@ Release 2.7.4 - UNRELEASED
BUG FIXES
HADOOP-13362. DefaultMetricsSystem leaks the source name when a source
unregisters (Junping Du via jlowe)
Release 2.7.3 - UNRELEASED
INCOMPATIBLE CHANGES

View File

@ -255,6 +255,7 @@ void unregisterSource(String name) {
if (namedCallbacks.containsKey(name)) {
namedCallbacks.remove(name);
}
DefaultMetricsSystem.removeSourceName(name);
}
synchronized

View File

@ -107,6 +107,11 @@ public static void removeMBeanName(ObjectName name) {
INSTANCE.removeObjectName(name.toString());
}
@InterfaceAudience.Private
public static void removeSourceName(String name) {
INSTANCE.removeSource(name);
}
@InterfaceAudience.Private
public static String sourceName(String name, boolean dupOK) {
return INSTANCE.newSourceName(name, dupOK);
@ -127,6 +132,10 @@ synchronized void removeObjectName(String name) {
mBeanNames.map.remove(name);
}
synchronized void removeSource(String name) {
sourceNames.map.remove(name);
}
synchronized String newSourceName(String name, boolean dupOK) {
if (sourceNames.map.containsKey(name)) {
if (dupOK) {

View File

@ -136,7 +136,6 @@ public void testContainerMetricsFinished() throws InterruptedException {
system.sampleMetrics();
system.sampleMetrics();
Thread.sleep(100);
system.stop();
// verify metrics1 is unregistered
assertTrue(metrics1 != ContainerMetrics.forContainer(
system, containerId1, 1, 0));
@ -146,6 +145,9 @@ public void testContainerMetricsFinished() throws InterruptedException {
// verify metrics3 is still registered
assertTrue(metrics3 == ContainerMetrics.forContainer(
system, containerId3, 1, 0));
// move stop() to the end to verify registering containerId1 and
// containerId2 won't get MetricsException thrown.
system.stop();
system.shutdown();
}
}