You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by cw...@apache.org on 2016/07/01 17:44:44 UTC

svn commit: r1750988 - /uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java

Author: cwiklik
Date: Fri Jul  1 17:44:44 2016
New Revision: 1750988

URL: http://svn.apache.org/viewvc?rev=1750988&view=rev
Log:
UIMA-4992 fetch cgroups location from /proc/mounts

Modified:
    uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java

Modified: uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java
URL: http://svn.apache.org/viewvc/uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java?rev=1750988&r1=1750987&r2=1750988&view=diff
==============================================================================
--- uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java (original)
+++ uima/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/NodeAgent.java Fri Jul  1 17:44:44 2016
@@ -22,6 +22,7 @@ import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileReader;
 import java.io.InputStreamReader;
 import java.io.ObjectInputStream;
@@ -269,17 +270,23 @@ public class NodeAgent extends AbstractD
             		}
             	}
             }
+            String cgroupsBaseDir = fetchCgroupsBaseDir("/proc/mounts");
+            
             if ( cgUtilsPath == null ) {
             	useCgroups = false;
                 logger.info("nodeAgent", null, "------- CGroups Disabled - Unable to Find Cgroups Utils Directory. Add/Modify ducc.agent.launcher.cgroups.utils.dir property in ducc.properties");
+            } else if ( cgroupsBaseDir == null || cgroupsBaseDir.trim().length() == 0) {
+            	useCgroups = false;
+                logger.info("nodeAgent", null, "------- CGroups Disabled - Unable to Find Cgroups Root Directory in /proc/mounts");
+            	
             } else {
-            	logger.info("nodeAgent",null,"Agent found cgroups runtime in "+cgUtilsPath);
+            	logger.info("nodeAgent",null,"Agent found cgroups runtime in "+cgUtilsPath+" cgroups base dir="+cgroupsBaseDir);
                 // get the top level cgroup folder from ducc.properties. If
                 // not defined, use /cgroup/ducc as default
-                String cgroupsBaseDir = System.getProperty("ducc.agent.launcher.cgroups.basedir");
-                if (cgroupsBaseDir == null) {
-                  cgroupsBaseDir = "/cgroup/ducc";
-                }
+            	//String cgroupsBaseDir = System.getProperty("ducc.agent.launcher.cgroups.basedir");
+//                if (cgroupsBaseDir == null) {
+//                  cgroupsBaseDir = "/cgroup/ducc";
+//                }
                 // get the cgroup subsystems. If not defined, default to the
                 // memory and cpu subsystem
                 String cgroupsSubsystems = System.getProperty("ducc.agent.launcher.cgroups.subsystems");
@@ -310,12 +317,12 @@ public class NodeAgent extends AbstractD
                 	  // value from cpu.shares file to make sure the values match. Any exception in the above steps
                 	  // will cause cgroups to be disabled.
                 	  //
-                	  cgroupsManager.validator(cgroupsBaseDir, containerId, uid,false)
+                	  cgroupsManager.validator(cgroupsBaseDir, containerId, System.getProperty("user.name"),false)
                 	              .cgcreate()
                 	              .cgset(100);   // write cpu.shares=100 and validate
                 	  
                 	  // cleanup dummy cgroup
-                	  cgroupsManager.destroyContainer(containerId, uid, SIGKILL);
+                	  cgroupsManager.destroyContainer(containerId, System.getProperty("user.name"), SIGKILL);
                 	  useCgroups = true;
                   } catch( CGroupsManager.CGroupsException ee) {
                 	  logger.info("nodeAgent", null, ee);
@@ -363,6 +370,45 @@ public class NodeAgent extends AbstractD
 
     }
   }
+  
+  private String fetchCgroupsBaseDir(String mounts) {
+	  String cbaseDir=null;
+	  BufferedReader br = null;
+	  try {
+		  FileInputStream fis = new FileInputStream(mounts);
+			//Construct BufferedReader from InputStreamReader
+		  br = new BufferedReader(new InputStreamReader(fis));
+		 
+		String line = null;
+		while ((line = br.readLine()) != null) {
+			System.out.println(line);
+			if ( line.trim().startsWith("cgroup") ) { 
+				String[] cgroupsInfo = line.split(" ");
+				if ( cgroupsInfo[1].indexOf("/memory") > -1 ) {
+					// return the mount point minus the memory part
+					cbaseDir = cgroupsInfo[1].substring(0, cgroupsInfo[1].indexOf("/memory") );
+				} else if ( cgroupsInfo[1].indexOf("cpu") > -1){
+					// return the mount point minus the memory part
+					cbaseDir = cgroupsInfo[1].substring(0, cgroupsInfo[1].indexOf("/cpu") );
+				} else {
+					cbaseDir = cgroupsInfo[1].trim();
+				}
+			    break;
+			}
+		}
+		 
+	  } catch( Exception e) {
+	        logger.info("nodeAgent", null,
+	                "------- Agent failed while checking for existence of ducc_ling", e);
+	  } finally {
+		  if ( br != null ) {
+			  try {
+				  br.close();
+			  } catch( Exception ex ) {}
+		  }
+	  }
+	  return cbaseDir;
+  }
   public int getNodeProcessors() {
 	    return runOSCommand(new String[] { "/usr/bin/getconf", "_NPROCESSORS_ONLN" });
   }