HADOOP-9559. When metrics system is restarted MBean names get incorrectly flagged as dupes. Contributed by Mostafa Elhemali and Mike Liddell.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1604225 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e74d99b81e
commit
f8041b0540
|
@ -582,6 +582,9 @@ Release 2.5.0 - UNRELEASED
|
|||
HADOOP-10716. Cannot use more than 1 har filesystem.
|
||||
(Rushabh Shah via cnauroth)
|
||||
|
||||
HADOOP-9559. When metrics system is restarted MBean names get incorrectly
|
||||
flagged as dupes. (Mostafa Elhemali and Mike Liddell via cnauroth)
|
||||
|
||||
BREAKDOWN OF HADOOP-10514 SUBTASKS AND RELATED JIRAS
|
||||
|
||||
HADOOP-10520. Extended attributes definition and FileSystem APIs for
|
||||
|
|
|
@ -30,6 +30,7 @@ import javax.management.ObjectName;
|
|||
import javax.management.ReflectionException;
|
||||
|
||||
import static com.google.common.base.Preconditions.*;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.collect.Maps;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
@ -226,7 +227,13 @@ class MetricsSourceAdapter implements DynamicMBean {
|
|||
mbeanName = null;
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
ObjectName getMBeanName() {
|
||||
return mbeanName;
|
||||
}
|
||||
|
||||
|
||||
private void updateInfoCache() {
|
||||
LOG.debug("Updating info cache...");
|
||||
infoCache = infoBuilder.reset(lastRecs).get();
|
||||
|
|
|
@ -32,6 +32,7 @@ import javax.management.ObjectName;
|
|||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import java.util.Locale;
|
||||
import static com.google.common.base.Preconditions.*;
|
||||
|
||||
|
@ -573,6 +574,11 @@ public class MetricsSystemImpl extends MetricsSystem implements MetricsSource {
|
|||
return allSources.get(name);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
MetricsSourceAdapter getSourceAdapter(String name) {
|
||||
return sources.get(name);
|
||||
}
|
||||
|
||||
private InitMode initMode() {
|
||||
LOG.debug("from system property: "+ System.getProperty(MS_INIT_MODE_KEY));
|
||||
LOG.debug("from environment variable: "+ System.getenv(MS_INIT_MODE_KEY));
|
||||
|
|
|
@ -110,6 +110,11 @@ public enum DefaultMetricsSystem {
|
|||
return INSTANCE.newObjectName(name);
|
||||
}
|
||||
|
||||
@InterfaceAudience.Private
|
||||
public static void removeMBeanName(ObjectName name) {
|
||||
INSTANCE.removeObjectName(name.toString());
|
||||
}
|
||||
|
||||
@InterfaceAudience.Private
|
||||
public static String sourceName(String name, boolean dupOK) {
|
||||
return INSTANCE.newSourceName(name, dupOK);
|
||||
|
@ -126,6 +131,10 @@ public enum DefaultMetricsSystem {
|
|||
}
|
||||
}
|
||||
|
||||
synchronized void removeObjectName(String name) {
|
||||
mBeanNames.map.remove(name);
|
||||
}
|
||||
|
||||
synchronized String newSourceName(String name, boolean dupOK) {
|
||||
if (sourceNames.map.containsKey(name)) {
|
||||
if (dupOK) {
|
||||
|
|
|
@ -84,6 +84,7 @@ public class MBeans {
|
|||
} catch (Exception e) {
|
||||
LOG.warn("Error unregistering "+ mbeanName, e);
|
||||
}
|
||||
DefaultMetricsSystem.removeMBeanName(mbeanName);
|
||||
}
|
||||
|
||||
static private ObjectName getMBeanName(String serviceName, String nameName) {
|
||||
|
|
|
@ -360,6 +360,24 @@ public class TestMetricsSystemImpl {
|
|||
ms.register(ts);
|
||||
}
|
||||
|
||||
@Test public void testStartStopStart() {
|
||||
DefaultMetricsSystem.shutdown(); // Clear pre-existing source names.
|
||||
MetricsSystemImpl ms = new MetricsSystemImpl("test");
|
||||
TestSource ts = new TestSource("ts");
|
||||
ms.start();
|
||||
ms.register("ts", "", ts);
|
||||
MetricsSourceAdapter sa = ms.getSourceAdapter("ts");
|
||||
assertNotNull(sa);
|
||||
assertNotNull(sa.getMBeanName());
|
||||
ms.stop();
|
||||
ms.shutdown();
|
||||
ms.start();
|
||||
sa = ms.getSourceAdapter("ts");
|
||||
assertNotNull(sa);
|
||||
assertNotNull(sa.getMBeanName());
|
||||
ms.stop();
|
||||
ms.shutdown();
|
||||
}
|
||||
|
||||
private void checkMetricsRecords(List<MetricsRecord> recs) {
|
||||
LOG.debug(recs);
|
||||
|
|
Loading…
Reference in New Issue