diff --git hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetrics.java hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetrics.java index a6de50b..caba170 100644 --- hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetrics.java +++ hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/metrics2/source/JvmMetrics.java @@ -86,6 +86,10 @@ public static JvmMetrics create(String processName, String sessionId, new JvmMetrics(processName, sessionId)); } + public static void reattach(MetricsSystem ms, JvmMetrics jvmMetrics) { + ms.register(JvmMetrics.name(), JvmMetrics.description(), jvmMetrics); + } + public static JvmMetrics initSingleton(String processName, String sessionId) { return Singleton.INSTANCE.init(processName, sessionId); } diff --git hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java index b1a7dae..6bead1d 100644 --- hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java +++ hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/UserGroupInformation.java @@ -58,6 +58,7 @@ import org.apache.hadoop.classification.InterfaceStability; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.io.Text; +import org.apache.hadoop.metrics2.MetricsSystem; import org.apache.hadoop.metrics2.annotation.Metric; import org.apache.hadoop.metrics2.annotation.Metrics; import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; @@ -126,6 +127,10 @@ static UgiMetrics create() { return DefaultMetricsSystem.instance().register(new UgiMetrics()); } + static void reattach() { + metrics = UgiMetrics.create(); + } + void addGetGroups(long latency) { getGroups.add(latency); if (getGroupsQuantiles != null) { @@ -238,6 +243,13 @@ public boolean logout() throws LoginException { } } + /** + * Reattach the class's metrics to a new metric system. + */ + public static void reattachMetrics() { + UgiMetrics.reattach(); + } + /** Metrics to track UGI activity */ static UgiMetrics metrics = UgiMetrics.create(); /** The auth method to use */ diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java index 2744bb4..251b5b6 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java @@ -30,6 +30,7 @@ import org.apache.hadoop.ha.HAServiceProtocol; import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState; import org.apache.hadoop.http.lib.StaticUserWebFilter; +import org.apache.hadoop.metrics2.MetricsSystem; import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem; import org.apache.hadoop.metrics2.source.JvmMetrics; import org.apache.hadoop.security.AuthenticationFilterInitializer; @@ -170,7 +171,7 @@ private WebApp webApp; private AppReportFetcher fetcher = null; protected ResourceTrackerService resourceTracker; - private JvmPauseMonitor pauseMonitor; + private JvmMetrics jvmMetrics; private boolean curatorEnabled = false; private CuratorFramework curator; private final String zkRootNodePassword = @@ -283,7 +284,7 @@ protected void serviceInit(Configuration conf) throws Exception { rmContext.setYarnConfiguration(conf); - createAndInitActiveServices(); + createAndInitActiveServices(false); webAppAddress = WebAppUtils.getWebAppBindURL(this.conf, YarnConfiguration.RM_BIND_HOST, @@ -488,6 +489,7 @@ protected static void validateConfigs(Configuration conf) { private ContainerAllocationExpirer containerAllocationExpirer; private ResourceManager rm; private RMActiveServiceContext activeServiceContext; + private boolean fromActive = false; RMActiveServices(ResourceManager rm) { super("RMActiveServices"); @@ -595,11 +597,17 @@ protected void serviceInit(Configuration configuration) throws Exception { addService(resourceTracker); rmContext.setResourceTrackerService(resourceTracker); - DefaultMetricsSystem.initialize("ResourceManager"); - JvmMetrics jm = JvmMetrics.initSingleton("ResourceManager", null); - pauseMonitor = new JvmPauseMonitor(); + MetricsSystem ms = DefaultMetricsSystem.initialize("ResourceManager"); + if (fromActive) { + JvmMetrics.reattach(ms, jvmMetrics); + UserGroupInformation.reattachMetrics(); + } else { + jvmMetrics = JvmMetrics.create("ResourceManager", null, ms); + } + + JvmPauseMonitor pauseMonitor = new JvmPauseMonitor(); addService(pauseMonitor); - jm.setPauseMonitor(pauseMonitor); + jvmMetrics.setPauseMonitor(pauseMonitor); // Initialize the Reservation system if (conf.getBoolean(YarnConfiguration.RM_RESERVATION_SYSTEM_ENABLE, @@ -1081,9 +1089,14 @@ protected void startWepApp() { /** * Helper method to create and init {@link #activeServices}. This creates an * instance of {@link RMActiveServices} and initializes it. + * + * @param fromActive Indicates if the call is from the active state transition + * or the RM initialization. + * @throws Exception */ - protected void createAndInitActiveServices() { + protected void createAndInitActiveServices(boolean fromActive) { activeServices = new RMActiveServices(this); + activeServices.fromActive = fromActive; activeServices.init(conf); } @@ -1114,7 +1127,7 @@ void reinitialize(boolean initialize) { QueueMetrics.clearQueueMetrics(); if (initialize) { resetDispatcher(); - createAndInitActiveServices(); + createAndInitActiveServices(true); } }