You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sa...@apache.org on 2014/03/12 15:24:50 UTC
[3/4] git commit: updating server force stop to have kill commands at
unix level
updating server force stop to have kill commands at unix level
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/9b4dedf0
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/9b4dedf0
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/9b4dedf0
Branch: refs/heads/master
Commit: 9b4dedf0307687eef408f557c27bda56d76eb021
Parents: f9b95c9
Author: Saminda Wijeratne <sa...@gmail.com>
Authored: Wed Mar 12 10:24:24 2014 -0400
Committer: Saminda Wijeratne <sa...@gmail.com>
Committed: Wed Mar 12 10:24:24 2014 -0400
----------------------------------------------------------------------
.../src/main/resources/bin/airavata-server.sh | 63 ++++++++++----
.../org/apache/airavata/server/ServerMain.java | 88 +++++++++-----------
2 files changed, 85 insertions(+), 66 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/airavata/blob/9b4dedf0/modules/distribution/airavata-server/src/main/resources/bin/airavata-server.sh
----------------------------------------------------------------------
diff --git a/modules/distribution/airavata-server/src/main/resources/bin/airavata-server.sh b/modules/distribution/airavata-server/src/main/resources/bin/airavata-server.sh
index 9247d68..e7ed1be 100755
--- a/modules/distribution/airavata-server/src/main/resources/bin/airavata-server.sh
+++ b/modules/distribution/airavata-server/src/main/resources/bin/airavata-server.sh
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
@@ -25,6 +25,8 @@ JAVA_OPTS=""
AIRAVATA_COMMAND=""
IS_DAEMON_MODE=false
LOGO=true
+STOP=false
+FORCE=false
for var in "$@"
do
case $var in
@@ -42,9 +44,14 @@ do
;;
stop)
LOGO=false
+ STOP=true
AIRAVATA_COMMAND="$AIRAVATA_COMMAND $var"
shift
;;
+ --force)
+ FORCE=true
+ shift
+ ;;
-nologo)
LOGO=false
shift
@@ -52,13 +59,13 @@ do
-h)
echo "Usage: airavata-server.sh [command-options]"
echo "command options:"
- echo " start Start server in daemon mode"
- echo " stop [--serverIndex n] [--force] Stop all airavata servers. Specify serverIndex stop a particular instance"
- echo " --<key>[=<value>] Server setting(s) to override or introduce (overrides values in airavata-server.properties)"
- echo " -nologo Do not show airavata logo"
- echo " -xdebug Start Airavata Server under JPDA debugger"
- echo " -security Enable Java 2 security"
- echo " -h Display this help and exit"
+ echo " start Start server in daemon mode"
+ echo " stop [--force] Stop all airavata servers."
+ echo " --<key>[=<value>] Server setting(s) to override or introduce (overrides values in airavata-server.properties)"
+ echo " -nologo Do not show airavata logo"
+ echo " -xdebug Start Airavata Server under JPDA debugger"
+ echo " -security Enable Java 2 security"
+ echo " -h Display this help and exit"
shift
exit 0
;;
@@ -73,16 +80,36 @@ if $LOGO ; then
cat $LOGO_FILE
fi
fi
-if $IS_DAEMON_MODE ; then
- echo "Starting airavata server in daemon mode..."
- nohup java $JAVA_OPTS -classpath "$XBAYA_CLASSPATH" \
- -Djava.endorsed.dirs="$AIRAVATA_HOME/lib/endorsed":"$JAVA_HOME/jre/lib/endorsed":"$JAVA_HOME/lib/endorsed" \
- org.apache.airavata.server.ServerMain $AIRAVATA_COMMAND $* > airavata-server.out &
- echo
- echo
+if $STOP && $FORCE ;
+then
+ for f in `find . -name "server-start_*"`; do
+ f_split=(${f//_/ });
+ echo "Found process file : $f"
+ echo -n " Sending kill signals to process ${f_split[1]}..."
+ out=`kill -9 ${f_split[1]} 2>&1`
+ if [ -z "$out" ]; then
+ echo "done"
+ else
+ echo "failed (REASON: $out)"
+ fi
+ echo -n " Removing process file..."
+ out=`rm $f 2>&1`
+ if [ -z "$out" ]; then
+ echo "done"
+ else
+ echo "failed (REASON: $out)"
+ fi
+ done
else
- java $JAVA_OPTS -classpath "$XBAYA_CLASSPATH" \
- -Djava.endorsed.dirs="$AIRAVATA_HOME/lib/endorsed":"$JAVA_HOME/jre/lib/endorsed":"$JAVA_HOME/lib/endorsed" \
- org.apache.airavata.server.ServerMain $AIRAVATA_COMMAND $*
+ if $IS_DAEMON_MODE ; then
+ echo "Starting airavata server in daemon mode..."
+ nohup java $JAVA_OPTS -classpath "$XBAYA_CLASSPATH" \
+ -Djava.endorsed.dirs="$AIRAVATA_HOME/lib/endorsed":"$JAVA_HOME/jre/lib/endorsed":"$JAVA_HOME/lib/endorsed" \
+ org.apache.airavata.server.ServerMain $AIRAVATA_COMMAND $* > airavata-server.out &
+ else
+ java $JAVA_OPTS -classpath "$XBAYA_CLASSPATH" \
+ -Djava.endorsed.dirs="$AIRAVATA_HOME/lib/endorsed":"$JAVA_HOME/jre/lib/endorsed":"$JAVA_HOME/lib/endorsed" \
+ org.apache.airavata.server.ServerMain $AIRAVATA_COMMAND $*
+ fi
fi
http://git-wip-us.apache.org/repos/asf/airavata/blob/9b4dedf0/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
----------------------------------------------------------------------
diff --git a/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java b/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
index 20534fb..8a99013 100644
--- a/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
+++ b/modules/server/src/main/java/org/apache/airavata/server/ServerMain.java
@@ -22,6 +22,7 @@ package org.apache.airavata.server;
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
@@ -44,10 +45,8 @@ public class ServerMain {
private final static Logger logger = LoggerFactory.getLogger(ServerMain.class);
private static boolean serversLoaded=false;
private static final String stopFileNamePrefix = "airavata-server-stop";
- private static final String stopFileNamePrefixForced = "airavata-server-stop-forced";
- private static int serverIndex=-1;
- private static final String serverStartedFileNamePrefix = "airavata-server-start";
- private static boolean forcedStop=false;
+ private static int serverPID=-1;
+ private static final String serverStartedFileNamePrefix = "server-start";
private static boolean systemShutDown=false;
static{
servers = new ArrayList<IServer>();
@@ -100,7 +99,7 @@ public class ServerMain {
private static void performServerStart(String[] args) {
setServerStarted();
- logger.info("Airavata server instance "+serverIndex+" starting...");
+ logger.info("Airavata server instance starting...");
ServerSettings.mergeSettingsCommandLineArgs(args);
startAllServers();
while(!hasStopRequested()){
@@ -136,14 +135,10 @@ public class ServerMain {
deleteOldStartRecords();
String serverIndexOption = "serverIndex";
if (commandLineParameters.getParameters().containsKey(serverIndexOption)){
- serverIndex=Integer.parseInt(commandLineParameters.getParameters().get(serverIndexOption));
- }
- String serverForcedStop = "force";
- if (commandLineParameters.getParameters().containsKey(serverForcedStop)){
- forcedStop=true;
+ serverPID=Integer.parseInt(commandLineParameters.getParameters().get(serverIndexOption));
}
if (isServerRunning()) {
- logger.info("Requesting airavata server"+(serverIndex==-1? "(s)":" instance "+serverIndex)+" to stop...");
+ logger.info("Requesting airavata server"+(serverPID==-1? "(s)":" instance "+serverPID)+" to stop...");
requestStop();
while(isServerRunning()){
try {
@@ -152,9 +147,9 @@ public class ServerMain {
e.printStackTrace();
}
}
- logger.info("Server"+(serverIndex==-1? "(s)":" instance "+serverIndex)+" stopped!!!");
+ logger.info("Server"+(serverPID==-1? "(s)":" instance "+serverPID)+" stopped!!!");
}else{
- logger.error("Server"+(serverIndex==-1? "":" instance "+serverIndex)+" is not running!!!");
+ logger.error("Server"+(serverPID==-1? "":" instance "+serverPID)+" is not running!!!");
}
}
@@ -164,38 +159,21 @@ public class ServerMain {
file.createNewFile();
new RandomAccessFile(file, "rw").getChannel().lock();
file.deleteOnExit();
- if (forcedStop){
- // incase a previous attempt of stopping without forcing is present, best to delete that file
- File f=new File((serverIndex==-1)? stopFileNamePrefix:stopFileNamePrefix+serverIndex);
- if (f.exists()){
- f.deleteOnExit();
- }
- }
}
private static boolean hasStopRequested(){
- forcedStop=new File(getServerStopForceFileName()).exists() || new File(stopFileNamePrefixForced).exists();
- return isSystemShutDown() || forcedStop || new File(getServerStopFileName()).exists() || new File(stopFileNamePrefix).exists();
+ return isSystemShutDown() || new File(getServerStopFileName()).exists() || new File(stopFileNamePrefix).exists();
}
private static String getServerStopFileName() {
- String filePrefix = forcedStop? stopFileNamePrefixForced : stopFileNamePrefix;
- return (serverIndex==-1)? filePrefix:filePrefix+serverIndex;
+ return stopFileNamePrefix;
}
- private static String getServerStopForceFileName() {
- return (serverIndex==-1)?stopFileNamePrefixForced:stopFileNamePrefixForced+serverIndex;
- }
-
private static void deleteOldStopRequests(){
File[] files = new File(".").listFiles();
for (File file : files) {
- if (file.getName().contains(stopFileNamePrefix) || file.getName().contains(stopFileNamePrefixForced)){
- try {
- file.delete();
- } catch (Exception e) {
- //file is locked which means there's an active process using it
- }
+ if (file.getName().contains(stopFileNamePrefix)){
+ file.delete();
}
}
}
@@ -205,6 +183,7 @@ public class ServerMain {
for (File file : files) {
if (file.getName().contains(serverStartedFileNamePrefix)){
try {
+ new FileOutputStream(file);
file.delete();
} catch (Exception e) {
//file is locked which means there's an active process using it
@@ -214,7 +193,7 @@ public class ServerMain {
}
private static boolean isServerRunning(){
- if (serverIndex==-1){
+ if (serverPID==-1){
String[] files = new File(".").list();
for (String file : files) {
if (file.contains(serverStartedFileNamePrefix)){
@@ -230,12 +209,10 @@ public class ServerMain {
@SuppressWarnings({ "resource" })
private static void setServerStarted(){
try {
+ serverPID = getPID();
deleteOldStopRequests();
File serverStartedFile = null;
- while(serverStartedFile==null || serverStartedFile.exists()){
- serverIndex++;
- serverStartedFile = new File(getServerStartedFileName());
- }
+ serverStartedFile = new File(getServerStartedFileName());
serverStartedFile.createNewFile();
serverStartedFile.deleteOnExit();
new RandomAccessFile(serverStartedFile,"rw").getChannel().lock();
@@ -247,20 +224,15 @@ public class ServerMain {
}
private static String getServerStartedFileName() {
- return serverStartedFileNamePrefix+serverIndex;
+ return serverStartedFileNamePrefix+"_"+Integer.toString(serverPID);
}
-
- private static int DEFAULT_FORCE_STOP_WAIT_INTERVAL=3000;
+
public static void stopAllServers() {
//stopping should be done in reverse order of starting the servers
for(int i=servers.size()-1;i>=0;i--){
try {
servers.get(i).stop();
- if (forcedStop) {
- waitForServerToStop(servers.get(i),DEFAULT_FORCE_STOP_WAIT_INTERVAL);
- }else{
- waitForServerToStop(servers.get(i),null);
- }
+ waitForServerToStop(servers.get(i),null);
} catch (Exception e) {
logger.error("Server Stop Error:",e);
}
@@ -302,7 +274,7 @@ public class ServerMain {
logger.info("Waiting for " + server.getName() + " to stop...");
}
//we are doing hasStopRequested() check because while we are stuck in the loop to stop there could be a forceStop request
- while(server.getStatus()==ServerStatus.STOPING && (maxWait==null || count<maxWait) && hasStopRequested() && (maxWait!=null || !forcedStop)){
+ while(server.getStatus()==ServerStatus.STOPING && (maxWait==null || count<maxWait)){
Thread.sleep(SERVER_STATUS_CHANGE_WAIT_INTERVAL);
count+=SERVER_STATUS_CHANGE_WAIT_INTERVAL;
}
@@ -318,4 +290,24 @@ public class ServerMain {
private static void setSystemShutDown(boolean systemShutDown) {
ServerMain.systemShutDown = systemShutDown;
}
+
+ private static int getPID(){
+ try {
+ java.lang.management.RuntimeMXBean runtime = java.lang.management.ManagementFactory
+ .getRuntimeMXBean();
+ java.lang.reflect.Field jvm = runtime.getClass()
+ .getDeclaredField("jvm");
+ jvm.setAccessible(true);
+ sun.management.VMManagement mgmt = (sun.management.VMManagement) jvm
+ .get(runtime);
+ java.lang.reflect.Method pid_method = mgmt.getClass()
+ .getDeclaredMethod("getProcessId");
+ pid_method.setAccessible(true);
+
+ int pid = (Integer) pid_method.invoke(mgmt);
+ return pid;
+ } catch (Exception e) {
+ return -1;
+ }
+ }
}
\ No newline at end of file