Author: cwiklik
Date: Fri Apr 22 17:30:28 2016
New Revision: 1740575
URL: http://svn.apache.org/viewvc?rev=1740575&view=rev
Log:
UIMA-4908 modified to use duccling when cleaning up processes in cgroup
container
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
Modified:
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
URL:
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java?rev=1740575&r1=1740574&r2=1740575&view=diff
==============================================================================
---
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
(original)
+++
uima/sandbox/uima-ducc/trunk/uima-ducc-agent/src/main/java/org/apache/uima/ducc/agent/launcher/CGroupsManager.java
Fri Apr 22 17:30:28 2016
@@ -283,9 +283,18 @@ public class CGroupsManager {
public void kill(final String user, final String pid, final int signal)
{
final String methodName = "kill";
- //InputStream is = null;
- //BufferedReader reader = null;
+ String c_launcher_path="";
try {
+
+ boolean useDuccling = false;
+ String useSpawn =
System.getProperty("ducc.agent.launcher.use.ducc_spawn");
+ if (useSpawn != null &&
useSpawn.toLowerCase().equals("true")) {
+ useDuccling = true;
+ c_launcher_path =
Utils.resolvePlaceholderIfExists(
+
System.getProperty("ducc.agent.launcher.ducc_spawn_path"),
+ System.getProperties());
+ }
+
String cmdLine;
String arg;
if (Utils.isWindows()) {
@@ -296,35 +305,16 @@ public class CGroupsManager {
arg = "-"+signal;
}
- String[] command = new String[] { cmdLine, arg, pid };
- launchCommand(command, "ducc");
- /*
- ProcessBuilder pb = new ProcessBuilder(commandLine);
- pb.redirectErrorStream(true);
- java.lang.Process killedProcess = pb.start();
- is = killedProcess.getInputStream();
- reader = new BufferedReader(
- new InputStreamReader(is));
- // read the next line from kill command
- while (reader.readLine() != null) {
- // dont care about the output, just drain the
buffers
- }
- is.close();
- killedProcess.waitFor();
- StringBuffer sb = new StringBuffer();
- for (String part : commandLine) {
- sb.append(part).append(" ");
- }
- if (agentLogger == null) {
- System.out.println("--------- Killed Process:"
+ pid
- + " Owned by:" + user + "
Command:" + sb.toString());
-
+ String[] command;
+ if (useDuccling) {
+ command = new String[] { c_launcher_path, "-u", user,
+ "--", cmdLine, arg, pid };
} else {
- agentLogger.info(methodName, null,
- "--------- Killed CGroup
Process:" + pid + " Owned by:" + user
- + " Command:" +
sb.toString());
+ command = new String[] { cmdLine, arg, pid };
}
- */
+
+ launchCommand(command);
+
StringBuffer sb = new StringBuffer();
for (String part : command) {
sb.append(part).append(" ");
@@ -374,7 +364,7 @@ public class CGroupsManager {
String[] command = new String[] { cgroupUtilsDir+"/cgcreate",
"-t",
"ducc", "-a", "ducc",
"-g",
cgroupSubsystems +
":ducc/" + containerId };
- int retCode = launchCommand(command, "ducc");
+ int retCode = launchCommand(command);
if ( cgroupExists(cgroupBaseDir + "/" + containerId)) {
// Starting with libcgroup v.0.38, the cgcreate fails
// with exit code = 96 even though the cgroup gets
@@ -420,7 +410,7 @@ public class CGroupsManager {
String[] command = new String[] {
cgroupUtilsDir+"/cgset", "-r",
"memory.limit_in_bytes=" +
containerMaxSize,
"ducc/" + containerId };
- int retCode = launchCommand(command, "ducc");
+ int retCode = launchCommand(command);
if (retCode == 0) {
agentLogger.info("setContainerMaxMemoryLimit",
null, ">>>>"
+ "SUCCESS - Created CGroup
Limit on Container:"
@@ -464,7 +454,7 @@ public class CGroupsManager {
String[] command = new String[] {
cgroupUtilsDir+"/cgset", "-r",
"cpu.shares=" + containerCpuShares,
"ducc/" + containerId };
- int retCode = launchCommand(command, "ducc");
+ int retCode = launchCommand(command);
if (retCode == 0) {
agentLogger.info("setContainerCpuShares", null,
">>>>"
+ "SUCCESS - Created CGroup
with CPU Shares="+containerCpuShares+" on Container:"
@@ -509,7 +499,7 @@ public class CGroupsManager {
String[] command = new String[] {
cgroupUtilsDir+"/cgset", "-r",
"memory.swappiness=" + swappiness,
"ducc/" + containerId };
- int retCode = launchCommand(command, "ducc");
+ int retCode = launchCommand(command);
if (retCode == 0) {
agentLogger.info("setContainerSwappiness",
null, ">>>>"
+ "SUCCESS - Updated CGroup
with Memory Swappiness="+swappiness+" on Container:"
@@ -582,7 +572,7 @@ public class CGroupsManager {
String[] command = new String[] { "/bin/rmdir",
cgroupBaseDir + "/" +
containerId };
- int retCode = launchCommand(command, "ducc");
+ int retCode = launchCommand(command);
if (retCode == 0) {
containerIds.remove(containerId);
return true;
@@ -596,10 +586,11 @@ public class CGroupsManager {
}
}
- private int launchCommand(String[] command, String userId) throws
Exception {
+ private int launchCommand(String[] command/*, String userId*/) throws
Exception {
int retryCount=0;
Object sleepMonitor = new Object();
+
synchronized(CGroupsManager.class) {
long delay = delayFactor;//
while( retryCount <= retryMax ) {