HADOOP-6777. Implement a functionality for suspend and resume a process. Contributed by Vinay Thota.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@948242 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Konstantin Boudnik 2010-05-25 23:00:40 +00:00
parent 5392319a24
commit 73643f4211
3 changed files with 70 additions and 0 deletions

View File

@ -336,6 +336,9 @@ Release 0.21.0 - Unreleased
IMPROVEMENTS
HADOOP-6777. Implement a functionality for suspend and resume a process.
(Vinay Thota via cos)
HADOOP-6772. Utilities for system tests specific. (Vinay Thota via cos)
HADOOP-6771. Herriot's artifact id for Maven deployment should be set to

View File

@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.util.Shell.ShellCommandExecutor;
import org.apache.hadoop.util.Shell;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
@ -274,6 +275,56 @@ public aspect DaemonProtocolAspect {
return Integer.parseInt(output.replaceAll("\n", "").trim());
}
/**
* This method is used for suspending the process.
* @param pid process id
* @throws IOException if an I/O error occurs.
* @return true if process is suspended otherwise false.
*/
public boolean DaemonProtocol.suspendProcess(String pid) throws IOException {
String suspendCmd = getDaemonConf().get("test.system.hdrc.suspend.cmd",
"kill -SIGSTOP");
String [] command = {"bash", "-c", suspendCmd + " " + pid};
ShellCommandExecutor shexec = new ShellCommandExecutor(command);
try {
shexec.execute();
} catch (Shell.ExitCodeException e) {
LOG.warn("suspended process throws an exitcode "
+ "exception for not being suspended the given process id.");
return false;
}
LOG.info("The suspend process command is :"
+ shexec.toString()
+ " and the output for the command is "
+ shexec.getOutput());
return true;
}
/**
* This method is used for resuming the process
* @param pid process id of suspended process.
* @throws IOException if an I/O error occurs.
* @return true if suspeneded process is resumed otherwise false.
*/
public boolean DaemonProtocol.resumeProcess(String pid) throws IOException {
String resumeCmd = getDaemonConf().get("test.system.hdrc.resume.cmd",
"kill -SIGCONT");
String [] command = {"bash", "-c", resumeCmd + " " + pid};
ShellCommandExecutor shexec = new ShellCommandExecutor(command);
try {
shexec.execute();
} catch(Shell.ExitCodeException e) {
LOG.warn("Resume process throws an exitcode "
+ "exception for not being resumed the given process id.");
return false;
}
LOG.info("The resume process command is :"
+ shexec.toString()
+ " and the output for the command is "
+ shexec.getOutput());
return true;
}
private String DaemonProtocol.user = null;
public String DaemonProtocol.getDaemonUser() {

View File

@ -162,4 +162,20 @@ int getNumberOfMatchesInLogFile(String pattern, String[] list)
* @throws IOException in case of errors
*/
String getDaemonUser() throws IOException;
/**
* It uses for suspending the process.
* @param pid process id.
* @return true if the process is suspended otherwise false.
* @throws IOException if an I/O error occurs.
*/
boolean suspendProcess(String pid) throws IOException;
/**
* It uses for resuming the suspended process.
* @param pid process id
* @return true if suspended process is resumed otherwise false.
* @throws IOException if an I/O error occurs.
*/
boolean resumeProcess(String pid) throws IOException;
}