X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=iotjava%2Fiotruntime%2Fmaster%2FIoTMaster.java;h=ce99125e4f947f06ba975df66a253f463fa3ae54;hb=18ca99a8de6bc1d02dc61612894e515b9107932c;hp=6a66039bf12ec6fd0a2f15581788c297a6b77d67;hpb=676386fdf11afbadac7c7281f59436f59d3a4ded;p=iot2.git diff --git a/iotjava/iotruntime/master/IoTMaster.java b/iotjava/iotruntime/master/IoTMaster.java index 6a66039..ce99125 100644 --- a/iotjava/iotruntime/master/IoTMaster.java +++ b/iotjava/iotruntime/master/IoTMaster.java @@ -112,6 +112,7 @@ public class IoTMaster { private static final String STR_CFG_FILE_EXT = ".config"; private static final String STR_CLS_FILE_EXT = ".class"; private static final String STR_JAR_FILE_EXT = ".jar"; + private static final String STR_SHELL_FILE_EXT = ".sh"; private static final String STR_SO_FILE_EXT = ".so"; private static final String STR_ZIP_FILE_EXT = ".zip"; private static final String STR_TCP_PROTOCOL = "tcp"; @@ -130,6 +131,8 @@ public class IoTMaster { private static final String STR_SSH = "ssh"; private static final String STR_SCP = "scp"; private static final String STR_IOTSLAVE_CPP = "./IoTSlave.o"; + private static final String STR_SHELL_HEADER = "#!/bin/sh"; + private static final String STR_JAVA_PATH = "/usr/bin/java"; private static int INT_SIZE = 4; // send length in the size of integer (4 bytes) @@ -210,6 +213,24 @@ public class IoTMaster { mapClassNameToCrim = new HashMap(); } + /** + * getPrintWriter() gets a new PrintWriter for a new object + * + * @param strObjectName String object name + * @return PrintWriter + */ + private PrintWriter getPrintWriter(String strObjectName) { + + FileWriter fw = null; + try { + fw = new FileWriter(strObjectName); + } catch (IOException ex) { + ex.printStackTrace(); + } + PrintWriter printWriter = new PrintWriter(new BufferedWriter(fw)); + return printWriter; + } + /** * A method to initialize constants from config file * @@ -870,13 +891,28 @@ public class IoTMaster { * * @return String */ - private String getCmdJavaDriverIoTSlave(String strIoTMasterHostAdd, String strIoTSlaveObjectHostAdd, String strObjName) { + /*private String getCmdJavaDriverIoTSlave(String strIoTMasterHostAdd, String strIoTSlaveObjectHostAdd, String strObjName) { return STR_SSH + " " + STR_USERNAME + strIoTSlaveObjectHostAdd + " cd " + STR_RUNTIME_DIR + " sudo java " + STR_CLS_PATH + " " + STR_RMI_PATH + " " + STR_RMI_HOSTNAME + strIoTSlaveObjectHostAdd + " " + STR_IOT_SLAVE_CLS + " " + strIoTMasterHostAdd + " " + commHan.getComPort(strObjName) + " " + commHan.getRMIRegPort(strObjName) + " " + commHan.getRMIStubPort(strObjName) + " >& " + STR_LOG_FILE_PATH + strObjName + ".log &"; + }*/ + private String getCmdJavaDriverIoTSlave(String strIoTMasterHostAdd, String strIoTSlaveObjectHostAdd, String strObjName) { + + // Create an Shell executable + String strJavaCommand = STR_SHELL_HEADER + "\nexec " + STR_JAVA_PATH + " " + STR_CLS_PATH + " " + STR_RMI_PATH + " " + + STR_RMI_HOSTNAME + strIoTSlaveObjectHostAdd + " " + STR_IOT_SLAVE_CLS + " " + strIoTMasterHostAdd + " " + + commHan.getComPort(strObjName) + " " + commHan.getRMIRegPort(strObjName) + " " + + commHan.getRMIStubPort(strObjName) + " > " + STR_LOG_FILE_PATH + strObjName + ".log &"; + String shellFile = "./" + strObjName + STR_SHELL_FILE_EXT; + createWrapperShellScript(strJavaCommand, shellFile); + // Send the file to the compute node + String strCmdSend = "scp " + shellFile + " " + STR_USERNAME + strIoTSlaveObjectHostAdd + ":" + STR_RUNTIME_DIR; + runCommand(strCmdSend); + System.out.println("IoTMaster: Sending shell file: " + strCmdSend); + return STR_SSH + " " + STR_USERNAME + strIoTSlaveObjectHostAdd + " cd " + STR_RUNTIME_DIR + " " + shellFile; } @@ -893,6 +929,22 @@ public class IoTMaster { } + /** + * createWrapperShellScript() gets a wrapper shell script + * + * @param strCommand String command + * @param strObjectName String object name + * @return PrintWriter + */ + private void createWrapperShellScript(String strCommand, String strFileName) { + + PrintWriter printWriter = getPrintWriter(strFileName); + printWriter.println(strCommand); + printWriter.close(); + runCommand("chmod 755 " + strFileName); + } + + /** * A private method to create an object on a specific machine * @@ -1500,7 +1552,7 @@ public class IoTMaster { * * @return String */ - private String getCmdJavaIoTSlave(String strObjControllerName) { + /*private String getCmdJavaIoTSlave(String strObjControllerName) { return STR_SSH + " " + STR_USERNAME + strIoTSlaveControllerHostAdd + " cd " + STR_RUNTIME_DIR + " sudo java " + STR_JVM_INIT_HEAP_SIZE + " " + @@ -1510,6 +1562,22 @@ public class IoTMaster { commHan.getRMIRegPort(strObjControllerName) + " " + commHan.getRMIStubPort(strObjControllerName) + " >& " + STR_LOG_FILE_PATH + strObjControllerName + ".log &"; + }*/ + private String getCmdJavaIoTSlave(String strObjControllerName) { + + // Create an Shell executable + String strJavaCommand = STR_SHELL_HEADER + "\nexec " + STR_JAVA_PATH + " " + STR_JVM_INIT_HEAP_SIZE + " " + + STR_JVM_MAX_HEAP_SIZE + " " + STR_CLS_PATH + " " + STR_RMI_PATH + " " + STR_IOT_SLAVE_CLS + " " + + strIoTMasterHostAdd + " " + commHan.getComPort(strObjControllerName) + " " + + commHan.getRMIRegPort(strObjControllerName) + " " + commHan.getRMIStubPort(strObjControllerName) + + " > " + STR_LOG_FILE_PATH + strObjControllerName + ".log &"; + String shellFile = "./" + strObjControllerName + STR_SHELL_FILE_EXT; + createWrapperShellScript(strJavaCommand, shellFile); + // Send the file to the compute node + String strCmdSend = "scp " + shellFile + " " + STR_USERNAME + strIoTSlaveControllerHostAdd + ":" + STR_RUNTIME_DIR; + runCommand(strCmdSend); + System.out.println("IoTMaster: Sending main controller shell file: " + strCmdSend); + return STR_SSH + " " + STR_USERNAME + strIoTSlaveControllerHostAdd + " cd " + STR_RUNTIME_DIR + " " + shellFile; }