Repository: airavata
Updated Branches:
  refs/heads/master 0b6e1e5af -> 74a5d2a56


https://issues.apache.org/jira/browse/AIRAVATA-1047


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/74a5d2a5
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/74a5d2a5
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/74a5d2a5

Branch: refs/heads/master
Commit: 74a5d2a56369f384b0433f0678e822764fbbec27
Parents: 0b6e1e5
Author: Saminda Wijeratne <[email protected]>
Authored: Mon Mar 10 00:40:01 2014 -0400
Committer: Saminda Wijeratne <[email protected]>
Committed: Mon Mar 10 00:40:01 2014 -0400

----------------------------------------------------------------------
 .../src/main/resources/bin/airavata-server.sh   | 46 ++++++++++------
 .../org/apache/airavata/server/ServerMain.java  | 56 ++++++++++++++++----
 2 files changed, 77 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/74a5d2a5/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 4d40f0b..37026ee 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
@@ -26,8 +26,11 @@ then
 fi
 
 JAVA_OPTS=""
-while [ $# -ge 1 ]; do
-    case $1 in
+AIRAVATA_COMMAND=""
+IS_DAEMON_MODE=false
+for var in "$@"
+do
+    case $var in
         -xdebug)
             JAVA_OPTS="$JAVA_OPTS -Xdebug -Xnoagent 
-Xrunjdwp:transport=dt_socket,server=y,address=8000"
             shift
@@ -36,25 +39,38 @@ while [ $# -ge 1 ]; do
             JAVA_OPTS="$JAVA_OPTS -Djava.security.manager 
-Djava.security.policy=$AIRAVATA_HOME/conf/axis2.policy 
-Daxis2.home=$AIRAVATA_HOME"
             shift
         ;;
+       start)
+           IS_DAEMON_MODE=true
+            shift
+        ;;
         -h)
-            echo "Usage: airavata-server.sh"
-            echo "commands:"
-            echo "  -xdebug    Start Airavata Server under JPDA debugger"
-            echo "  -security  Enable Java 2 security"
-            echo "  -h         help"
+            echo "Usage: airavata-server.sh [command-options]"
+            echo "command options:"
+           echo "  start                   Start server in daemon mode"
+           echo "  stop [--serverIndex n]  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 "  -xdebug                 Start Airavata Server under JPDA 
debugger"
+            echo "  -security               Enable Java 2 security"
+            echo "  -h                      Display this help and exit"
             shift
             exit 0
         ;;
-        *)
-            echo "Error: unknown command:$1"
-            echo "For help: airavata-server.sh -h"
+       *)
+           AIRAVATA_COMMAND="$AIRAVATA_COMMAND $var"
             shift
-            exit 1
     esac
 done
 
-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 \
-    -repo "$AIRAVATA_HOME"/repository/services -conf 
"$AIRAVATA_HOME"/conf/axis2.xml $*
+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
+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
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/74a5d2a5/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 eb9efb2..5a51995 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
@@ -42,6 +42,7 @@ 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 int serverIndex=-1;
        private static final String serverStartedFileNamePrefix = 
"airavata-server-start";
     static{
                servers = new ArrayList<IServer>();
@@ -86,14 +87,27 @@ public class ServerMain {
                CommandLine commandLineParser = 
StringUtil.getCommandLineParser(args);
                
                if (commandLineParser.getArgList().contains("stop")){
+                       String serverIndexOption = "serverIndex";
+                       if (commandLineParser.hasOption(serverIndexOption)){
+                               
serverIndex=Integer.parseInt(commandLineParser.getOptionValue(serverIndexOption));
+                       }
                        if (isServerRunning()) {
-                               logger.info("Requesting airavata server to 
stop...");
+                               logger.info("Requesting airavata 
server"+(serverIndex==-1? "(s)":" instance "+serverIndex)+" to stop...");
                                requestStop();
+                               while(isServerRunning()){
+                                       try {
+                                               Thread.sleep(5000);
+                                       } catch (InterruptedException e) {
+                                               e.printStackTrace();
+                                       }
+                               }
+                               logger.info("Server"+(serverIndex==-1? "(s)":" 
instance "+serverIndex)+" stopped!!!");
                        }else{
-                               logger.error("Server is not running!!!");
+                               logger.error("Server"+(serverIndex==-1? "":" 
instance "+serverIndex)+" is not running!!!");
                        }
                }else{
                        setServerStarted();
+                       logger.info("Airavata server instance "+serverIndex+" 
starting...");
                        ServerSettings.mergeSettingsCommandLineArgs(args);
                        startAllServers();
                        while(!hasStopRequested()){
@@ -105,32 +119,50 @@ public class ServerMain {
                        }
                        if (hasStopRequested()){
                                stopAllServers();
-                               stopRequestServed();
+                               System.exit(0);
                        }
                }
        }
 
+       @SuppressWarnings("resource")
        private static void requestStop() throws IOException {
                //FIXME currently stop requests all the servers to stop
-               new File(stopFileNamePrefix).createNewFile();
+               File file = new File(getServerStopFileName());
+               file.createNewFile();
+               new RandomAccessFile(file, "rw").getChannel().lock();
+               file.deleteOnExit();
        }
        
        private static boolean hasStopRequested(){
-               return new File(stopFileNamePrefix).exists();
+               return new File(getServerStopFileName()).exists() || new 
File(stopFileNamePrefix).exists(); 
        }
-       
-       private static void stopRequestServed(){
-               new File(stopFileNamePrefix).delete();
+
+       private static String getServerStopFileName() {
+               return 
(serverIndex==-1)?stopFileNamePrefix:stopFileNamePrefix+serverIndex;
        }
 
        private static boolean isServerRunning(){
-               return new File(serverStartedFileNamePrefix).exists();
+               if (serverIndex==-1){
+                       String[] files = new File(".").list();
+                       for (String file : files) {
+                               if (file.contains(serverStartedFileNamePrefix)){
+                                       return true;
+                               }
+                       }
+                       return false;
+               }else{
+                       return new File(getServerStartedFileName()).exists();
+               }
        }
        
        @SuppressWarnings({ "resource" })
        private static void setServerStarted(){
                try {
-                       File serverStartedFile = new 
File(serverStartedFileNamePrefix);
+                       File serverStartedFile = null;
+                       while(serverStartedFile==null || 
serverStartedFile.exists()){
+                               serverIndex++;
+                               serverStartedFile = new 
File(getServerStartedFileName());
+                       }
                        serverStartedFile.createNewFile();
                        serverStartedFile.deleteOnExit();
                        new 
RandomAccessFile(serverStartedFile,"rw").getChannel().lock();
@@ -140,6 +172,10 @@ public class ServerMain {
                        e.printStackTrace();
                }
        }
+
+       private static String getServerStartedFileName() {
+               return serverStartedFileNamePrefix+serverIndex;
+       }
        
        
        public static void stopAllServers() {

Reply via email to