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" });
}