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 vi...@apache.org on 2011/04/29 11:27:36 UTC

svn commit: r1097744 - in /hadoop/mapreduce/branches/MR-279: ./ yarn/yarn-server/yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/ yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache...

Author: vinodkv
Date: Fri Apr 29 09:27:35 2011
New Revision: 1097744

URL: http://svn.apache.org/viewvc?rev=1097744&view=rev
Log:
Fixing NPEs by disabling ContainerMonitoring for non-linux systems.

Modified:
    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/containermanager/monitor/ContainersMonitorImpl.java
    hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitor.java

Modified: hadoop/mapreduce/branches/MR-279/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/mapreduce/branches/MR-279/CHANGES.txt?rev=1097744&r1=1097743&r2=1097744&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/CHANGES.txt (original)
+++ hadoop/mapreduce/branches/MR-279/CHANGES.txt Fri Apr 29 09:27:35 2011
@@ -3,6 +3,9 @@ Hadoop MapReduce Change Log
 Trunk (unreleased changes)
 
   MAPREDUCE-279
+
+    Disable ContainerMonitoring for non-linux systems. (vinodkv)
+
     Fix file creation in JobHistoryEventHandler. (sharad)
 
     Reorient container localization to be per-container rather than

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=1097744&r1=1097743&r2=1097744&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 Fri Apr 29 09:27:35 2011
@@ -134,7 +134,7 @@ public class ContainersMonitorImpl exten
    * 
    * @return true if total physical memory check is enabled.
    */
-  boolean doCheckPhysicalMemory() {
+  boolean isPhysicalMemoryCheckEnabled() {
     return !(this.maxPmemAllottedForContainers == DISABLED_MEMORY_LIMIT);
   }
 
@@ -143,23 +143,43 @@ public class ContainersMonitorImpl exten
    * 
    * @return true if total virtual memory check is enabled.
    */
-  boolean doCheckVirtualMemory() {
+  boolean isVirtualMemoryCheckEnabled() {
     return !(this.maxVmemAllottedForContainers == DISABLED_MEMORY_LIMIT);
   }
 
+  private boolean isEnabled() {
+    if (!ProcfsBasedProcessTree.isAvailable()) {
+      LOG.info("ProcessTree implementation is missing on this system. "
+          + this.getClass().getName() + " is disabled.");
+      return false;
+    }
+
+    if (!(isPhysicalMemoryCheckEnabled() || isVirtualMemoryCheckEnabled())) {
+      LOG.info("Neither virutal-memory nor physical-memory monitoring is " +
+          "needed. Not running the monitor-thread");
+      return false;
+    }
+
+    return true;
+  }
+
   @Override
   public synchronized void start() {
-    this.monitoringThread.start();
+    if (this.isEnabled()) {
+      this.monitoringThread.start();
+    }
     super.start();
   }
 
   @Override
   public synchronized void stop() {
-    this.monitoringThread.interrupt();
-    try {
-      this.monitoringThread.join();
-    } catch (InterruptedException e) {
-      ;
+    if (this.isEnabled()) {
+      this.monitoringThread.interrupt();
+      try {
+        this.monitoringThread.join();
+      } catch (InterruptedException e) {
+        ;
+      }
     }
     super.stop();
   }
@@ -284,12 +304,6 @@ public class ContainersMonitorImpl exten
     @Override
     public void run() {
 
-      if (!(doCheckPhysicalMemory() || doCheckVirtualMemory())) {
-        LOG.info("Neither virutal-memory nor physical-memory monitoring is " +
-            "needed. Not running the monitor-thread");
-        return;
-      }
-
       while (true) {
 
         // Print the processTrees for debugging.
@@ -380,7 +394,7 @@ public class ContainersMonitorImpl exten
 
             boolean isMemoryOverLimit = false;
             String msg = "";
-            if (doCheckVirtualMemory()
+            if (isVirtualMemoryCheckEnabled()
                 && isProcessTreeOverLimit(containerId.toString(),
                     currentVmemUsage, curMemUsageOfAgedProcesses, vmemLimit)) {
               // Container (the root process) is still alive and overflowing
@@ -399,7 +413,7 @@ public class ContainersMonitorImpl exten
                       + "\nDump of the process-tree for " + containerId
                       + " : \n" + pTree.getProcessTreeDump();
               isMemoryOverLimit = true;
-            } else if (doCheckPhysicalMemory()
+            } else if (isPhysicalMemoryCheckEnabled()
                 && isProcessTreeOverLimit(containerId.toString(),
                     currentPmemUsage, curRssMemUsageOfAgedProcesses,
                     pmemLimit)) {
@@ -477,7 +491,7 @@ public class ContainersMonitorImpl exten
   @Override
   public void handle(ContainersMonitorEvent monitoringEvent) {
 
-    if (!(doCheckPhysicalMemory() || doCheckVirtualMemory())) {
+    if (!isEnabled()) {
       return;
     }
 

Modified: hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitor.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/monitor/TestContainersMonitor.java?rev=1097744&r1=1097743&r2=1097744&view=diff
==============================================================================
--- hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitor.java (original)
+++ hadoop/mapreduce/branches/MR-279/yarn/yarn-server/yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/monitor/TestContainersMonitor.java Fri Apr 29 09:27:35 2011
@@ -238,7 +238,7 @@ public class TestContainersMonitor {
   public void testContainerKillOnMemoryOverflow() throws IOException,
       InterruptedException {
 
-    if (!System.getProperty("os.name").startsWith("Linux")) {
+    if (!ProcfsBasedProcessTree.isAvailable()) {
       return;
     }