You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mapreduce-commits@hadoop.apache.org by ma...@apache.org on 2011/05/26 05:00:11 UTC

svn commit: r1127765 - in /hadoop/mapreduce/branches/MR-279: ./ yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/ yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodem...

Author: mahadev
Date: Thu May 26 03:00:10 2011
New Revision: 1127765

URL: http://svn.apache.org/viewvc?rev=1127765&view=rev
Log:
MAPREDUCE-2532. Metrics for NodeManager (Luke Lu via mahadev)

Added:
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java
Modified:
    hadoop/mapreduce/branches/MR-279/.gitignore
    hadoop/mapreduce/branches/MR-279/CHANGES.txt
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/DummyContainerManager.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestEventFlow.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/BaseContainerManagerTest.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestContainerManager.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/TestContainer.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/MiniYARNCluster.java

Modified: hadoop/mapreduce/branches/MR-279/.gitignore
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/.gitignore?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/.gitignore (original)
+++ hadoop/mapreduce/branches/MR-279/.gitignore Thu May 26 03:00:10 2011
@@ -14,6 +14,7 @@
 # limitations under the License.
 
 *~
+.eclipse.templates/
 .classpath
 .project
 .launches

Modified: hadoop/mapreduce/branches/MR-279/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/CHANGES.txt?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/CHANGES.txt (original)
+++ hadoop/mapreduce/branches/MR-279/CHANGES.txt Thu May 26 03:00:10 2011
@@ -4,6 +4,8 @@ Trunk (unreleased changes)
 
   MAPREDUCE-279
 
+    MAPREDUCE-2532. Metrics for NodeManager (Luke Lu via mahadev)
+
     MAPREDUCE-2527. Metrics for MRAppMaster (Luke lu via mahadev)
 
     Add debug config for delaying delete of local files. (cdouglas)

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeManager.java Thu May 26 03:00:10 2011
@@ -29,6 +29,7 @@ import java.util.concurrent.ConcurrentSk
 
 import org.apache.hadoop.NodeHealthCheckerService;
 import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
 import org.apache.hadoop.security.SecurityUtil;
 import org.apache.hadoop.util.ReflectionUtils;
 import org.apache.hadoop.yarn.YarnException;
@@ -43,11 +44,13 @@ import org.apache.hadoop.yarn.server.api
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.ContainerManagerImpl;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.Application;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 import org.apache.hadoop.yarn.server.nodemanager.webapp.WebServer;
 import org.apache.hadoop.yarn.service.CompositeService;
 import org.apache.hadoop.yarn.service.Service;
 
 public class NodeManager extends CompositeService {
+  protected final NodeManagerMetrics metrics = NodeManagerMetrics.create();
 
   public NodeManager() {
     super(NodeManager.class.getName());
@@ -55,7 +58,8 @@ public class NodeManager extends Composi
 
   protected NodeStatusUpdater createNodeStatusUpdater(Context context,
       Dispatcher dispatcher, NodeHealthCheckerService healthChecker) {
-    return new NodeStatusUpdaterImpl(context, dispatcher, healthChecker);
+    return new NodeStatusUpdaterImpl(context, dispatcher, healthChecker,
+                                     metrics);
   }
 
   protected NodeResourceMonitor createNodeResourceMonitor() {
@@ -65,7 +69,8 @@ public class NodeManager extends Composi
   protected ContainerManagerImpl createContainerManager(Context context,
       ContainerExecutor exec, DeletionService del,
       NodeStatusUpdater nodeStatusUpdater) {
-    return new ContainerManagerImpl(context, exec, del, nodeStatusUpdater);
+    return new ContainerManagerImpl(context, exec, del, nodeStatusUpdater,
+                                    metrics);
   }
 
   protected WebServer createWebServer(Context nmContext,
@@ -125,6 +130,9 @@ public class NodeManager extends Composi
             NodeManager.this.stop();
           }
         });
+
+    DefaultMetricsSystem.initialize("NodeManager");
+
     super.init(conf);
     // TODO add local dirs to del
   }
@@ -139,6 +147,12 @@ public class NodeManager extends Composi
     super.start();
   }
 
+  @Override
+  public void stop() {
+    super.stop();
+    DefaultMetricsSystem.shutdown();
+  }
+
   public static class NMContext implements Context {
 
     private final ConcurrentMap<ApplicationId, Application> applications =

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/NodeStatusUpdaterImpl.java Thu May 26 03:00:10 2011
@@ -55,6 +55,7 @@ import org.apache.hadoop.yarn.server.api
 import org.apache.hadoop.yarn.server.api.records.NodeStatus;
 import org.apache.hadoop.yarn.server.api.records.RegistrationResponse;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 import org.apache.hadoop.yarn.service.AbstractService;
 
 public class NodeStatusUpdaterImpl extends AbstractService implements
@@ -82,13 +83,15 @@ public class NodeStatusUpdaterImpl exten
   private RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null);
 
   private final NodeHealthCheckerService healthChecker;
+  private final NodeManagerMetrics metrics;
 
   public NodeStatusUpdaterImpl(Context context, Dispatcher dispatcher,
-      NodeHealthCheckerService healthChecker) {
+      NodeHealthCheckerService healthChecker, NodeManagerMetrics metrics) {
     super(NodeStatusUpdaterImpl.class.getName());
     this.healthChecker = healthChecker;
     this.context = context;
     this.dispatcher = dispatcher;
+    this.metrics = metrics;
   }
 
   @Override
@@ -99,9 +102,10 @@ public class NodeStatusUpdaterImpl exten
     this.heartBeatInterval =
         conf.getLong(NMConfig.HEARTBEAT_INTERVAL,
             NMConfig.DEFAULT_HEARTBEAT_INTERVAL);
-    int memory = conf.getInt(NMConfig.NM_VMEM_GB, 8);
+    int memory = conf.getInt(NMConfig.NM_VMEM_GB, NMConfig.DEFAULT_NM_VMEM_GB);
     this.totalResource = recordFactory.newRecordInstance(Resource.class);
     this.totalResource.setMemory(memory * 1024);
+    metrics.addResource(totalResource);
     super.init(conf);
   }
 

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/ContainerManagerImpl.java Thu May 26 03:00:10 2011
@@ -87,6 +87,7 @@ import org.apache.hadoop.yarn.server.nod
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitor;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorEventType;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 import org.apache.hadoop.yarn.server.security.ContainerTokenSecretManager;
 import org.apache.hadoop.yarn.service.CompositeService;
 import org.apache.hadoop.yarn.service.Service;
@@ -105,22 +106,25 @@ public class ContainerManagerImpl extend
   private final ResourceLocalizationService rsrcLocalizationSrvc;
   private final ContainersLauncher containersLauncher;
   private final AuxServices auxiluaryServices;
+  private final NodeManagerMetrics metrics;
 
   private final NodeStatusUpdater nodeStatusUpdater;
   private ContainerTokenSecretManager containerTokenSecretManager;
 
   private final RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null);
   
-  protected AsyncDispatcher dispatcher;
+  protected final AsyncDispatcher dispatcher;
 
   private final DeletionService deletionService;
 
   public ContainerManagerImpl(Context context, ContainerExecutor exec,
-      DeletionService deletionContext, NodeStatusUpdater nodeStatusUpdater) {
+      DeletionService deletionContext, NodeStatusUpdater nodeStatusUpdater,
+      NodeManagerMetrics metrics) {
     super(ContainerManagerImpl.class.getName());
     this.context = context;
     dispatcher = new AsyncDispatcher();
     this.deletionService = deletionContext;
+    this.metrics = metrics;
 
     rsrcLocalizationSrvc =
         createResourceLocalizationService(exec, deletionContext);
@@ -261,7 +265,7 @@ public class ContainerManagerImpl extend
     }
 
     Container container =
-        new ContainerImpl(this.dispatcher, launchContext, credentials);
+        new ContainerImpl(this.dispatcher, launchContext, credentials, metrics);
     ContainerId containerID = launchContext.getContainerId();
     ApplicationId applicationID = containerID.getAppId();
     if (context.getContainers().putIfAbsent(containerID, container) != null) {
@@ -281,6 +285,8 @@ public class ContainerManagerImpl extend
     // TODO: Validate the request
     dispatcher.getEventHandler().handle(new ApplicationInitEvent(container));
     StartContainerResponse response = recordFactory.newRecordInstance(StartContainerResponse.class);
+    metrics.launchedContainer();
+    metrics.allocateContainer(launchContext.getResource());
     return response;
   }
 

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/ContainerImpl.java Thu May 26 03:00:10 2011
@@ -53,6 +53,7 @@ import org.apache.hadoop.yarn.server.nod
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.event.LogAggregatorContainerFinishedEvent;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainerStartMonitoringEvent;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainerStopMonitoringEvent;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 import org.apache.hadoop.yarn.state.InvalidStateTransitonException;
 import org.apache.hadoop.yarn.state.MultipleArcTransition;
 import org.apache.hadoop.yarn.state.SingleArcTransition;
@@ -66,6 +67,7 @@ public class ContainerImpl implements Co
   private final Lock writeLock;
   private final Dispatcher dispatcher;
   private final Credentials credentials;
+  private final NodeManagerMetrics metrics;
   private final ContainerLaunchContext launchContext;
   private String exitCode = "NA";
   private final StringBuilder diagnostics;
@@ -78,11 +80,13 @@ public class ContainerImpl implements Co
     new HashMap<Path,String>();
 
   public ContainerImpl(Dispatcher dispatcher,
-      ContainerLaunchContext launchContext, Credentials creds) {
+      ContainerLaunchContext launchContext, Credentials creds,
+      NodeManagerMetrics metrics) {
     this.dispatcher = dispatcher;
     this.launchContext = launchContext;
     this.diagnostics = new StringBuilder();
     this.credentials = creds;
+    this.metrics = metrics;
 
     ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
     this.readLock = readWriteLock.readLock();
@@ -342,6 +346,39 @@ public class ContainerImpl implements Co
     }
   }
 
+  @SuppressWarnings("fallthrough")
+  private void finished() {
+    switch (getContainerState()) {
+      case EXITED_WITH_SUCCESS:
+        metrics.endRunningContainer();
+        metrics.completedContainer();
+        break;
+      case EXITED_WITH_FAILURE:
+        metrics.endRunningContainer();
+        // fall through
+      case LOCALIZATION_FAILED:
+        metrics.failedContainer();
+        break;
+      case CONTAINER_CLEANEDUP_AFTER_KILL:
+        metrics.endRunningContainer();
+        // fall through
+      case NEW:
+        metrics.killedContainer();
+    }
+
+    metrics.releaseContainer(getLaunchContext().getResource());
+
+    // Inform the application
+    ContainerId containerID = getContainerID();
+    EventHandler eventHandler = dispatcher.getEventHandler();
+    eventHandler.handle(new ApplicationContainerFinishedEvent(containerID));
+    // Remove the container from the resource-monitor
+    eventHandler.handle(new ContainerStopMonitoringEvent(containerID));
+    // Tell the logService too
+    eventHandler.handle(new LogAggregatorContainerFinishedEvent(
+        containerID, exitCode));
+  }
+
   static class ContainerTransition implements
       SingleArcTransition<ContainerImpl, ContainerEvent> {
 
@@ -359,6 +396,7 @@ public class ContainerImpl implements Co
     public ContainerState transition(ContainerImpl container,
         ContainerEvent event) {
       final ContainerLaunchContext ctxt = container.getLaunchContext();
+      container.metrics.initingContainer();
 
       // Inform the AuxServices about the opaque serviceData
       Map<String,ByteBuffer> csd = ctxt.getAllServiceData();
@@ -411,6 +449,7 @@ public class ContainerImpl implements Co
           container.dispatcher.getEventHandler().handle(
               new ContainerLocalizationEvent(
                LocalizationEventType.CLEANUP_CONTAINER_RESOURCES, container));
+          container.metrics.endInitingContainer();
           return ContainerState.LOCALIZATION_FAILED;
         }
         if (!publicRsrc.isEmpty()) {
@@ -433,6 +472,7 @@ public class ContainerImpl implements Co
         container.dispatcher.getEventHandler().handle(
             new ContainersLauncherEvent(container,
                 ContainersLauncherEventType.LAUNCH_CONTAINER));
+        container.metrics.endInitingContainer();
         return ContainerState.LOCALIZED;
       }
     }
@@ -460,6 +500,7 @@ public class ContainerImpl implements Co
       container.dispatcher.getEventHandler().handle(
           new ContainersLauncherEvent(container,
               ContainersLauncherEventType.LAUNCH_CONTAINER));
+      container.metrics.endInitingContainer();
       return ContainerState.LOCALIZED;
     }
   }
@@ -476,6 +517,7 @@ public class ContainerImpl implements Co
       container.dispatcher.getEventHandler().handle(
           new ContainerStartMonitoringEvent(container.getContainerID(),
               vmemBytes, -1));
+      container.metrics.runningContainer();
     }
   }
 
@@ -521,7 +563,7 @@ public class ContainerImpl implements Co
       container.dispatcher.getEventHandler().handle(
           new ContainerLocalizationEvent(
             LocalizationEventType.CLEANUP_CONTAINER_RESOURCES, container));
-
+      container.metrics.endInitingContainer();
     }
   }
 
@@ -558,15 +600,7 @@ public class ContainerImpl implements Co
       SingleArcTransition<ContainerImpl, ContainerEvent> {
     @Override
     public void transition(ContainerImpl container, ContainerEvent event) {
-      // Inform the application
-      ContainerId containerID = container.getContainerID();
-      EventHandler eventHandler = container.dispatcher.getEventHandler();
-      eventHandler.handle(new ApplicationContainerFinishedEvent(containerID));
-      // Remove the container from the resource-monitor
-      eventHandler.handle(new ContainerStopMonitoringEvent(containerID));
-      // Tell the logService too
-      eventHandler.handle(new LogAggregatorContainerFinishedEvent(
-          containerID, container.exitCode));
+      container.finished();
     }
   }
 

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ContainersMonitorImpl.java Thu May 26 03:00:10 2011
@@ -39,8 +39,8 @@ public class ContainersMonitorImpl exten
   private long monitoringInterval;
   private MonitoringThread monitoringThread;
 
-  List<ContainerId> containersToBeRemoved;
-  Map<ContainerId, ProcessTreeInfo> containersToBeAdded;
+  final List<ContainerId> containersToBeRemoved;
+  final Map<ContainerId, ProcessTreeInfo> containersToBeAdded;
   Map<ContainerId, ProcessTreeInfo> trackingContainers =
       new HashMap<ContainerId, ProcessTreeInfo>();
 
@@ -308,7 +308,7 @@ public class ContainersMonitorImpl exten
 
         // Print the processTrees for debugging.
         if (LOG.isDebugEnabled()) {
-          StringBuffer tmp = new StringBuffer("[ ");
+          StringBuilder tmp = new StringBuilder("[ ");
           for (ProcessTreeInfo p : trackingContainers.values()) {
             tmp.append(p.getPID());
             tmp.append(" ");

Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java?rev=1127765&view=auto
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java (added)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/metrics/NodeManagerMetrics.java Thu May 26 03:00:10 2011
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.yarn.server.nodemanager.metrics;
+
+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;
+import org.apache.hadoop.metrics2.lib.MutableCounterInt;
+import org.apache.hadoop.metrics2.lib.MutableGaugeInt;
+import org.apache.hadoop.metrics2.source.JvmMetrics;
+import org.apache.hadoop.yarn.api.records.Resource;
+
+@Metrics(about="Metrics for node manager", context="yarn")
+public class NodeManagerMetrics {
+  @Metric MutableCounterInt containersLaunched;
+  @Metric MutableCounterInt containersCompleted;
+  @Metric MutableCounterInt containersFailed;
+  @Metric MutableCounterInt containersKilled;
+  @Metric("# of initializing containers")
+      MutableGaugeInt containersIniting;
+  @Metric MutableGaugeInt containersRunning;
+  @Metric("Current allocated memory in GB")
+      MutableGaugeInt allocatedGB;
+  @Metric("Current # of allocated containers")
+      MutableGaugeInt allocatedContainers;
+  @Metric MutableGaugeInt availableGB;
+
+  public static NodeManagerMetrics create() {
+    return create(DefaultMetricsSystem.instance());
+  }
+
+  static NodeManagerMetrics create(MetricsSystem ms) {
+    JvmMetrics.create("NodeManager", null, ms);
+    return ms.register(new NodeManagerMetrics());
+  }
+
+  // Potential instrumentation interface methods
+
+  public void launchedContainer() {
+    containersLaunched.incr();
+  }
+
+  public void completedContainer() {
+    containersCompleted.incr();
+  }
+
+  public void failedContainer() {
+    containersFailed.incr();
+  }
+
+  public void killedContainer() {
+    containersKilled.incr();
+  }
+
+  public void initingContainer() {
+    containersIniting.incr();
+  }
+
+  public void endInitingContainer() {
+    containersIniting.decr();
+  }
+
+  public void runningContainer() {
+    containersRunning.incr();
+  }
+
+  public void endRunningContainer() {
+    containersRunning.decr();
+  }
+
+  public void allocateContainer(Resource res) {
+    allocatedContainers.incr();
+    allocatedGB.incr(res.getMemory() / 1024);
+    availableGB.decr(res.getMemory() / 1024);
+  }
+
+  public void releaseContainer(Resource res) {
+    allocatedContainers.decr();
+    allocatedGB.decr(res.getMemory() / 1024);
+    availableGB.incr(res.getMemory() / 1024);
+  }
+
+  public void addResource(Resource res) {
+    availableGB.incr(res.getMemory() / 1024);
+  }
+}

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/DummyContainerManager.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/DummyContainerManager.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/DummyContainerManager.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/DummyContainerManager.java Thu May 26 03:00:10 2011
@@ -46,6 +46,7 @@ import org.apache.hadoop.yarn.server.nod
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.localizer.event.LocalizationEvent;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.LogAggregationService;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.logaggregation.event.LogAggregatorEvent;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 
 public class DummyContainerManager extends ContainerManagerImpl {
 
@@ -55,8 +56,9 @@ public class DummyContainerManager exten
   private static final RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(null);
   
   public DummyContainerManager(Context context, ContainerExecutor exec,
-      DeletionService deletionContext, NodeStatusUpdater nodeStatusUpdater) {
-    super(context, exec, deletionContext, nodeStatusUpdater);
+      DeletionService deletionContext, NodeStatusUpdater nodeStatusUpdater,
+      NodeManagerMetrics metrics) {
+    super(context, exec, deletionContext, nodeStatusUpdater, metrics);
   }
 
   @Override

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestEventFlow.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestEventFlow.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestEventFlow.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestEventFlow.java Thu May 26 03:00:10 2011
@@ -42,6 +42,7 @@ import org.apache.hadoop.yarn.factory.pr
 import org.apache.hadoop.yarn.server.api.ResourceTracker;
 import org.apache.hadoop.yarn.server.nodemanager.NodeManager.NMContext;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.BaseContainerManagerTest;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 import org.junit.Test;
 
 public class TestEventFlow {
@@ -81,8 +82,9 @@ public class TestEventFlow {
     DeletionService del = new DeletionService(exec);
     Dispatcher dispatcher = new AsyncDispatcher();
     NodeHealthCheckerService healthChecker = null;
+    NodeManagerMetrics metrics = NodeManagerMetrics.create();
     NodeStatusUpdater nodeStatusUpdater =
-        new NodeStatusUpdaterImpl(context, dispatcher, healthChecker) {
+        new NodeStatusUpdaterImpl(context, dispatcher, healthChecker, metrics) {
       @Override
       protected ResourceTracker getRMClient() {
         return new LocalRMInterface();
@@ -96,7 +98,7 @@ public class TestEventFlow {
     };
 
     DummyContainerManager containerManager =
-        new DummyContainerManager(context, exec, del, nodeStatusUpdater);
+        new DummyContainerManager(context, exec, del, nodeStatusUpdater, metrics);
     containerManager.init(conf);
     containerManager.start();
 

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/TestNodeStatusUpdater.java Thu May 26 03:00:10 2011
@@ -48,6 +48,7 @@ import org.apache.hadoop.yarn.server.api
 import org.apache.hadoop.yarn.server.api.records.RegistrationResponse;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 import org.apache.hadoop.yarn.service.Service.STATE;
 import org.junit.After;
 import org.junit.Assert;
@@ -114,7 +115,7 @@ public class TestNodeStatusUpdater {
         launchContext.setContainerId(firstContainerID);
         launchContext.setResource(recordFactory.newRecordInstance(Resource.class));
         launchContext.getResource().setMemory(2);
-        Container container = new ContainerImpl(null, launchContext, null);
+        Container container = new ContainerImpl(null, launchContext, null, null);
         this.context.getContainers().put(firstContainerID, container);
       } else if (heartBeatID == 2) {
         // Checks on the RM end
@@ -140,7 +141,7 @@ public class TestNodeStatusUpdater {
         launchContext.setContainerId(secondContainerID);
         launchContext.setResource(recordFactory.newRecordInstance(Resource.class));
         launchContext.getResource().setMemory(3);
-        Container container = new ContainerImpl(null, launchContext, null);
+        Container container = new ContainerImpl(null, launchContext, null, null);
         this.context.getContainers().put(secondContainerID, container);
       } else if (heartBeatID == 3) {
         // Checks on the RM end
@@ -174,8 +175,8 @@ public class TestNodeStatusUpdater {
     private Context context;
 
     public MyNodeStatusUpdater(Context context, Dispatcher dispatcher,
-        NodeHealthCheckerService healthChecker) {
-      super(context, dispatcher, healthChecker);
+        NodeHealthCheckerService healthChecker, NodeManagerMetrics metrics) {
+      super(context, dispatcher, healthChecker, metrics);
       this.context = context;
     }
 
@@ -202,7 +203,8 @@ public class TestNodeStatusUpdater {
       @Override
       protected NodeStatusUpdater createNodeStatusUpdater(Context context,
           Dispatcher dispatcher, NodeHealthCheckerService healthChecker) {
-        return new MyNodeStatusUpdater(context, dispatcher, healthChecker);
+        return new MyNodeStatusUpdater(context, dispatcher, healthChecker,
+                                       metrics);
       }
     };
 

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/BaseContainerManagerTest.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/BaseContainerManagerTest.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/BaseContainerManagerTest.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/BaseContainerManagerTest.java Thu May 26 03:00:10 2011
@@ -53,6 +53,7 @@ import org.apache.hadoop.yarn.server.nod
 import org.apache.hadoop.yarn.server.nodemanager.NodeStatusUpdaterImpl;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.Application;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.application.ApplicationState;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 import org.apache.hadoop.yarn.service.Service.STATE;
 import org.junit.After;
 import org.junit.Before;
@@ -61,9 +62,6 @@ public abstract class BaseContainerManag
 
   protected static RecordFactory recordFactory = RecordFactoryProvider
       .getRecordFactory(null);
-  static {
-    DefaultMetricsSystem.setMiniClusterMode(true);
-  }
 
   protected static FileContext localFS;
   protected static File localDir;
@@ -71,6 +69,8 @@ public abstract class BaseContainerManag
   protected static File remoteLogDir;
   protected static File tmpDir;
 
+  protected final NodeManagerMetrics metrics = NodeManagerMetrics.create();
+
   public BaseContainerManagerTest() throws UnsupportedFileSystemException {
     localFS = FileContext.getLocalFSFileContext();
     localDir =
@@ -95,7 +95,7 @@ public abstract class BaseContainerManag
   protected String user = "nobody";
 
   protected NodeStatusUpdater nodeStatusUpdater = new NodeStatusUpdaterImpl(
-      context, new AsyncDispatcher(), null) {
+      context, new AsyncDispatcher(), null, metrics) {
     @Override
     protected ResourceTracker getRMClient() {
       return new LocalRMInterface();
@@ -147,7 +147,8 @@ public abstract class BaseContainerManag
 
     exec = createContainerExecutor();
     containerManager =
-        new ContainerManagerImpl(context, exec, delSrvc, nodeStatusUpdater);
+        new ContainerManagerImpl(context, exec, delSrvc, nodeStatusUpdater,
+                                 metrics);
     containerManager.init(conf);
   }
 

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestContainerManager.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestContainerManager.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestContainerManager.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestContainerManager.java Thu May 26 03:00:10 2011
@@ -264,8 +264,8 @@ public class TestContainerManager extend
       IOException {
     // Real del service
     delSrvc = new DeletionService(exec);
-    containerManager =
-        new ContainerManagerImpl(context, exec, delSrvc, nodeStatusUpdater);
+    containerManager = new ContainerManagerImpl(context, exec, delSrvc,
+        nodeStatusUpdater, metrics);
     containerManager.init(conf);
     containerManager.start();
 

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/TestContainer.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/TestContainer.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/TestContainer.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/container/TestContainer.java Thu May 26 03:00:10 2011
@@ -17,6 +17,8 @@
 */
 package org.apache.hadoop.yarn.server.nodemanager.containermanager.container;
 
+import org.apache.hadoop.yarn.event.Dispatcher;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 import java.net.URISyntaxException;
 
 import java.nio.ByteBuffer;
@@ -40,6 +42,7 @@ import org.apache.hadoop.yarn.api.record
 import org.apache.hadoop.yarn.api.records.URL;
 import org.apache.hadoop.yarn.event.DrainDispatcher;
 import org.apache.hadoop.yarn.event.EventHandler;
+import org.apache.hadoop.yarn.server.nodemanager.NodeManager;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServicesEvent;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.AuxServicesEventType;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainersLauncherEvent;
@@ -57,6 +60,8 @@ import static org.mockito.Mockito.*;
 
 public class TestContainer {
 
+  final NodeManagerMetrics metrics = NodeManagerMetrics.create();
+
   /**
    * Verify correct container request events sent to localizer.
    */
@@ -83,7 +88,7 @@ public class TestContainer {
       final Map<String,LocalResource> localResources = createLocalResources(r);
       when(ctxt.getAllLocalResources()).thenReturn(localResources);
 
-      final Container c = new ContainerImpl(dispatcher, ctxt, null);
+      final Container c = newContainer(dispatcher, ctxt);
       assertEquals(ContainerState.NEW, c.getContainerState());
 
       // Verify request for public/private resources to localizer
@@ -135,8 +140,7 @@ public class TestContainer {
       System.out.println("testLocalizationLaunch seed: " + seed);
       final Map<String,LocalResource> localResources = createLocalResources(r);
       when(ctxt.getAllLocalResources()).thenReturn(localResources);
-
-      final Container c = new ContainerImpl(dispatcher, ctxt, null);
+      final Container c = newContainer(dispatcher, ctxt);
       assertEquals(ContainerState.NEW, c.getContainerState());
 
       c.handle(new ContainerEvent(cId, ContainerEventType.INIT_CONTAINER));
@@ -208,7 +212,7 @@ public class TestContainer {
       final Map<String,ByteBuffer> serviceData = createServiceData(r);
       when(ctxt.getAllServiceData()).thenReturn(serviceData);
 
-      final Container c = new ContainerImpl(dispatcher, ctxt, null);
+      final Container c = newContainer(dispatcher, ctxt);
       assertEquals(ContainerState.NEW, c.getContainerState());
 
       // Verify propagation of service data to AuxServices
@@ -331,4 +335,7 @@ public class TestContainer {
     return serviceData;
   }
 
+  Container newContainer(Dispatcher disp, ContainerLaunchContext ctx) {
+    return new ContainerImpl(disp, ctx, null, metrics);
+  }
 }

Added: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java?rev=1127765&view=auto
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java (added)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/metrics/TestNodeManagerMetrics.java Thu May 26 03:00:10 2011
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.yarn.server.nodemanager.metrics;
+
+import org.apache.hadoop.metrics2.MetricsRecordBuilder;
+import static org.apache.hadoop.test.MetricsAsserts.*;
+import org.apache.hadoop.yarn.api.records.Resource;
+import org.apache.hadoop.yarn.util.Records;
+
+import org.junit.Test;
+
+public class TestNodeManagerMetrics {
+  static final int GiB = 1024; // MiB
+
+  @Test public void testNames() {
+    NodeManagerMetrics metrics = NodeManagerMetrics.create();
+    Resource total = Records.newRecord(Resource.class);
+    total.setMemory(8*GiB);
+    Resource resource = Records.newRecord(Resource.class);
+    resource.setMemory(1*GiB);
+
+    metrics.addResource(total);
+
+    for (int i = 5; i-- > 0;) {
+      metrics.launchedContainer();
+      metrics.allocateContainer(resource);
+    }
+
+    metrics.initingContainer();
+    metrics.endInitingContainer();
+    metrics.runningContainer();
+    metrics.endRunningContainer();
+    metrics.completedContainer();
+    metrics.releaseContainer(resource);
+
+    metrics.failedContainer();
+    metrics.releaseContainer(resource);
+
+    metrics.killedContainer();
+    metrics.releaseContainer(resource);
+
+    metrics.initingContainer();
+    metrics.runningContainer();
+
+    checkMetrics(5, 1, 1, 1, 1, 1, 2, 2, 6);
+  }
+
+  private void checkMetrics(int launched, int completed, int failed, int killed,
+                            int initing, int running, int allocatedGB,
+                            int allocatedContainers, int availableGB) {
+    MetricsRecordBuilder rb = getMetrics("NodeManagerMetrics");
+    assertCounter("ContainersLaunched", launched, rb);
+    assertCounter("ContainersCompleted", completed, rb);
+    assertCounter("ContainersFailed", failed, rb);
+    assertCounter("ContainersKilled", killed, rb);
+    assertGauge("ContainersIniting", initing, rb);
+    assertGauge("ContainersRunning", running, rb);
+    assertGauge("AllocatedGB", allocatedGB, rb);
+    assertGauge("AllocatedContainers", allocatedContainers, rb);
+    assertGauge("AvailableGB", availableGB, rb);
+  }
+}

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/webapp/TestNMWebServer.java Thu May 26 03:00:10 2011
@@ -22,15 +22,11 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.Writer;
-import java.nio.ByteBuffer;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.api.records.ApplicationId;
 import org.apache.hadoop.yarn.api.records.ContainerId;
 import org.apache.hadoop.yarn.api.records.ContainerLaunchContext;
-import org.apache.hadoop.yarn.api.records.LocalResource;
 import org.apache.hadoop.yarn.event.AsyncDispatcher;
 import org.apache.hadoop.yarn.event.Dispatcher;
 import org.apache.hadoop.yarn.factories.RecordFactory;
@@ -43,6 +39,7 @@ import org.apache.hadoop.yarn.server.nod
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.Container;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerImpl;
 import org.apache.hadoop.yarn.server.nodemanager.containermanager.container.ContainerState;
+import org.apache.hadoop.yarn.server.nodemanager.metrics.NodeManagerMetrics;
 import org.apache.hadoop.yarn.util.BuilderUtils;
 import org.apache.hadoop.yarn.util.ConverterUtils;
 import org.junit.Before;
@@ -51,8 +48,8 @@ import static org.mockito.Mockito.*;
 
 public class TestNMWebServer {
 
-  private static final File testRootDir = new File("target-"
-      + TestNMWebServer.class.getName());
+  private static final File testRootDir = new File("target",
+      TestNMWebServer.class.getSimpleName());
 
   @Before
   public void setup() {
@@ -94,6 +91,7 @@ public class TestNMWebServer {
         BuilderUtils.newContainerId(recordFactory, appId, 0);
     ContainerId container2 =
         BuilderUtils.newContainerId(recordFactory, appId, 1);
+    NodeManagerMetrics metrics = mock(NodeManagerMetrics.class);
     for (ContainerId containerId : new ContainerId[] { container1,
         container2}) {
       // TODO: Use builder utils
@@ -101,7 +99,9 @@ public class TestNMWebServer {
           recordFactory.newRecordInstance(ContainerLaunchContext.class);
       launchContext.setContainerId(containerId);
       launchContext.setUser(user);
-      Container container = new ContainerImpl(dispatcher, launchContext, null) {
+      Container container =
+          new ContainerImpl(dispatcher, launchContext, null, metrics) {
+        @Override
         public ContainerState getContainerState() {
           return ContainerState.RUNNING;
         };

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/MiniYARNCluster.java
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/MiniYARNCluster.java?rev=1127765&r1=1127764&r2=1127765&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/MiniYARNCluster.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-tests/src/test/java/org/apache/hadoop/yarn/server/MiniYARNCluster.java Thu May 26 03:00:10 2011
@@ -168,7 +168,7 @@ public class MiniYARNCluster extends Com
           protected NodeStatusUpdater createNodeStatusUpdater(Context context,
               Dispatcher dispatcher, NodeHealthCheckerService healthChecker) {
             return new NodeStatusUpdaterImpl(context, dispatcher,
-                healthChecker) {
+                healthChecker, metrics) {
               @Override
               protected ResourceTracker getRMClient() {
                 // For in-process communication without RPC