Author: chatellier Date: 2009-02-04 10:31:47 +0000 (Wed, 04 Feb 2009) New Revision: 1785 Added: isis-fish/trunk/doc/SimulationSSH.rst isis-fish/trunk/src/main/resources/ssh/launch-isis-cron.seq isis-fish/trunk/src/main/resources/ssh/launch-isis-qsub.seq Removed: isis-fish/trunk/src/main/resources/ssh/launch-isis.seq Modified: isis-fish/trunk/pom.xml isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java Log: Ajout des cl?\195?\169s de configuration (qsub, remote tmp dir) Doc Added: isis-fish/trunk/doc/SimulationSSH.rst =================================================================== --- isis-fish/trunk/doc/SimulationSSH.rst (rev 0) +++ isis-fish/trunk/doc/SimulationSSH.rst 2009-02-04 10:31:47 UTC (rev 1785) @@ -0,0 +1,25 @@ +Configuration d'Isis +==================== + +Dans le fichier $HOME/.isis-config-3 + +Il faut configurer les paramètres : + + ssh.key.file=/home/username/.ssh/id_rsa + simulation.ssh.server=caparmor.ifremer.fr\:22 + simulation.ssh.username=username + simulation.ssh.datapath=/home/username/isis-database-3 + simulation.ssh.addscripttoqueuecommand=/usr/pbs/bin/qsub + simulation.ssh.isis.home=/home/chatellier/isis-fish-3.2.0.3 + simulation.ssh.tmppath=/tmp + simulation.ssh.control.check.interval=5 + +Le script qsub +============== + +Le script qsub est dans src/main/resources/ssh +(template freemarker). + +Il est uploadé et ajouté à qsub. + +(ie : qsub script) Modified: isis-fish/trunk/pom.xml =================================================================== --- isis-fish/trunk/pom.xml 2009-02-04 10:03:57 UTC (rev 1784) +++ isis-fish/trunk/pom.xml 2009-02-04 10:31:47 UTC (rev 1785) @@ -302,7 +302,7 @@ <dependency> <groupId>org.tmatesoft</groupId> <artifactId>svnkit</artifactId> - <version>1.2.1.5297</version> + <version>1.2.2.5405</version> <scope>compile</scope> </dependency> <!-- fin svnkit pour communication subversion --> Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2009-02-04 10:03:57 UTC (rev 1784) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2009-02-04 10:31:47 UTC (rev 1785) @@ -271,27 +271,61 @@ } /** - * Retourne le chemin complet du jar. + * Retourne le chemin relatif ou abs du repertoire + * root des données d'isis. * - * @return simulator jar path + * @return simulator data path */ - public String getSimulatorSshJarPath() { - String result = getOption(Option.SIMULATOR_SSH_JARPATH.key); + public String getSimulatorSshDataPath() { + String result = getOption(Option.SIMULATOR_SSH_DATAPATH.key); return result; } /** - * Retourne le chemin relatif ou abs du repertoire - * root des données d'isis. + * Retourne le chemin distant ou est installé isis. * - * @return simulator data path + * @return remote isis home */ - public String getSimulatorSshDataPath() { - String result = getOption(Option.SIMULATOR_SSH_DATAPATH.key); + public String getSimulatorSshIsisHome() { + String result = getOption(Option.SIMULATOR_SSH_ISIS_HOME.key); return result; } /** + * Retourne l'emplacement du dossier temporaire distant. + * + * Ce dossier doit être ABSOLUT. + * + * @return tmp dir + */ + public String getSimulatorSshTmpPath() { + String result = getOption(Option.SIMULATOR_SSH_TMPPATH.key); + return result; + } + + /** + * Retourne la commande a utiliser pour ajouter + * le script à la queue des simulation. + * + * @return add to queue command + */ + public String getSimulatorSshAddToQueueCommand() { + String result = getOption(Option.SIMULATOR_SSH_ADDSCRIPTTOQUEUECOMMAND.key); + return result; + } + + /** + * Retourne l'interval de temps a utiliser + * pour recuperer le fichier de control. + * + * @return time (in seconds) + */ + public long getSimulatorSshControlCheckInterval() { + int result = getOptionAsInt(Option.SIMULATOR_SSH_CONTROLCHECKINTERVAL.key); + return result; + } + + /** * Retourne la clé privée de l'utilisteur courant. * * @return private ssh key path @@ -646,8 +680,14 @@ SIMULATOR_SSH_USER_NAME("simulation.ssh.username", _("isisfish.config.main.simulation.ssh.login.description"), "isisfish"), /** Serveur accessible par ssh : remote data path */ SIMULATOR_SSH_DATAPATH("simulation.ssh.datapath", _("isisfish.config.main.simulation.ssh.datapath.description"), "/home/" + SIMULATOR_SSH_USER_NAME.defaultValue + "/isis-database-3"), - /** Serveur accessible par SSH : chemin complet du jar depuis le /home une fois connecté */ - SIMULATOR_SSH_JARPATH("simulation.ssh.jarpath", _("isisfish.config.main.simulation.ssh.jarpath.description"), "./isis-fish-" + getVersion() + "/isis-fish-" + getVersion() + ".jar"), + /** Serveur accessible par ssh : remote isis home install */ + SIMULATOR_SSH_ISIS_HOME("simulation.ssh.isis.home", _("isisfish.config.main.simulation.ssh.isis.home.description"), "/home/" + SIMULATOR_SSH_USER_NAME.defaultValue + "/isis-fish"), + /** Serveur accessible par ssh : remote tmp path */ + SIMULATOR_SSH_TMPPATH("simulation.ssh.tmppath", _("isisfish.config.main.simulation.ssh.tmppath.description"), "/tmp"), + /** Serveur accessible par SSH : chemin pour executer le script d'ajout des script dans la queue */ + SIMULATOR_SSH_ADDSCRIPTTOQUEUECOMMAND("simulation.ssh.addscripttoqueuecommand", _("isisfish.config.main.simulation.ssh.addscripttoqueuecommand.description"), "/usr/pbs/bin/qsub"), + /** Serveur accessible par SSH : interval de check du fichier de control */ + SIMULATOR_SSH_CONTROLCHECKINTERVAL("simulation.ssh.control.check.interval", _("isisfish.config.main.simulation.ssh.control.check.interval.description"), "5"), LOCALE("locale", _("isisfish.config.main.locale.description"), "fr_FR"), // REGION_MAP("regionMap", _("isisfish.config.main.regionMap.description"), "maps"), Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2009-02-04 10:03:57 UTC (rev 1784) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SSHSimulatorLauncher.java 2009-02-04 10:31:47 UTC (rev 1785) @@ -368,14 +368,23 @@ String localPath = simulationFile.getAbsolutePath(); - // Copy simulation file in same arch as local arch - // on windows, it's a bad idee :))) - // copy it always on caparmor remote temp dir ? - // /tmp ? - // TODO check it + // first check that remote directory exists + String remotePath = IsisFish.config.getSimulatorSshTmpPath(); + String command = "if [ ! -d \"" + remotePath +"\" ] ; then mkdir \"" + remotePath + "\"; fi"; + if(log.isInfoEnabled()) { + log.info("Creating remote temp directory (if not exists) " + remotePath); + if(log.isDebugEnabled()) { + log.debug("Executing command : " + command); + } + } + int exit = SSHUtils.exec(session, command); + + if(exit != 0) { + throw new SSHException(_("Command '%s' fail to execute", command)); + } + + // upload directory in that dir - String remotePath = "/tmp/"; - if (localPath.lastIndexOf("/") > 0) { remotePath += localPath.substring(localPath.lastIndexOf("/") + 1); } else if (localPath.lastIndexOf("\\") > 0) { // windows @@ -429,14 +438,10 @@ String localPath = simulationScript.getAbsolutePath(); - // Copy simulation file in same arch as local arch - // on windows, it's a bad idee :))) - // copy it always on caparmor remote temp dir ? - // /tmp ? - // TODO check it + String remotePath = IsisFish.config.getSimulatorSshTmpPath(); + // remote temp directory should have been created + // by #downloadResults(Session, String) - String remotePath = "/tmp/"; - if (localPath.lastIndexOf("/") > 0) { remotePath += localPath.substring(localPath.lastIndexOf("/") + 1); } else if (localPath.lastIndexOf("\\") > 0) { // windows @@ -468,7 +473,7 @@ File tempScript = File.createTempFile("launch-isis", ".seq"); tempScript.deleteOnExit(); // auto delete - String fileContent = getSimulationScriptLaunchContent("ssh/launch-isis.seq", simuationId, simulationZip); + String fileContent = getSimulationScriptLaunchContent("ssh/launch-isis-qsub.seq", simuationId, simulationZip); FileUtil.writeString(tempScript, fileContent); return tempScript; @@ -498,6 +503,7 @@ // context values Map<String, Object> root = new HashMap<String, Object>(); + root.put("isishome", IsisFish.config.getSimulatorSshIsisHome()); root.put("simulationid", simuationId); root.put("simulationzip", simulationZip); @@ -530,7 +536,7 @@ // command to : // - add script in qsub queue - String command = "qsub \"" + scriptRemotePath + "\""; + String command = IsisFish.config.getSimulatorSshAddToQueueCommand() + " \"" + scriptRemotePath + "\""; int exit = SSHUtils.exec(session, command); @@ -566,9 +572,6 @@ */ protected class RemoteSSHControlThread implements Runnable { - /** Sleep 1s */ - protected static final int SLEEPTIME = 1000; - /** Opened ssh session */ protected Session sshSession; @@ -593,12 +596,14 @@ @Override public void run() { + long sleepTime = IsisFish.config.getSimulatorSshControlCheckInterval() * 1000; + boolean running = true; while (running) { // wait try { - Thread.sleep(SLEEPTIME); + Thread.sleep(sleepTime); // log (to check if thread is still alive) if (log.isDebugEnabled()) { Added: isis-fish/trunk/src/main/resources/ssh/launch-isis-cron.seq =================================================================== --- isis-fish/trunk/src/main/resources/ssh/launch-isis-cron.seq (rev 0) +++ isis-fish/trunk/src/main/resources/ssh/launch-isis-cron.seq 2009-02-04 10:31:47 UTC (rev 1785) @@ -0,0 +1,7 @@ +#!/bin/bash + +cd "${isishome}" +#source /usr/share/modules/init/csh +#module load java/1.6.0 + +java -jar isis-fish-3.2.0.3.jar --option launch.ui false --simulateWithSimulation "${simulationid}" "${simulationzip}" Copied: isis-fish/trunk/src/main/resources/ssh/launch-isis-qsub.seq (from rev 1773, isis-fish/trunk/src/main/resources/ssh/launch-isis.seq) =================================================================== --- isis-fish/trunk/src/main/resources/ssh/launch-isis-qsub.seq (rev 0) +++ isis-fish/trunk/src/main/resources/ssh/launch-isis-qsub.seq 2009-02-04 10:31:47 UTC (rev 1785) @@ -0,0 +1,9 @@ +#!/bin/csh + +#PBS -l mem=1000mb + +cd "${isishome}" +source /usr/share/modules/init/csh +module load java/1.6.0 + +java -jar isis-fish.jar --option launch.ui false --simulateWithSimulation "${simulationid}" "${simulationzip}" Property changes on: isis-fish/trunk/src/main/resources/ssh/launch-isis-qsub.seq ___________________________________________________________________ Name: svn:mergeinfo + Deleted: isis-fish/trunk/src/main/resources/ssh/launch-isis.seq =================================================================== --- isis-fish/trunk/src/main/resources/ssh/launch-isis.seq 2009-02-04 10:03:57 UTC (rev 1784) +++ isis-fish/trunk/src/main/resources/ssh/launch-isis.seq 2009-02-04 10:31:47 UTC (rev 1785) @@ -1,9 +0,0 @@ -#!/bin/csh - -#PBS -l mem=1000mb - -cd /export/home3/smahevas/isis-fish -source /usr/share/modules/init/csh -module load java/1.6.0 - -java -jar isis-fish-3.2.0.3/isis-fish.jar --option launch.ui false --simulateWithSimulation "${simulationid}" "${simulationzip}" Modified: isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java =================================================================== --- isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java 2009-02-04 10:03:57 UTC (rev 1784) +++ isis-fish/trunk/src/test/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncherTest.java 2009-02-04 10:31:47 UTC (rev 1785) @@ -24,6 +24,7 @@ import org.junit.Test; +import fr.ifremer.isisfish.IsisFish; import freemarker.template.TemplateException; /** @@ -50,17 +51,22 @@ @Test public void testFreemarkerTemplate() throws IOException, TemplateException { - final String TEMPLATE = "ssh/launch-isis.seq"; + final String TEMPLATE = "ssh/launch-isis-qsub.seq"; final String SIMULATIONID = "testid"; final String SIMULATIONZIP = "test.zip"; - + final String ISISHOME = IsisFish.config.getSimulatorSshIsisHome(); + SSHSimulatorLauncher launcher = new SSHSimulatorLauncher(); String content = launcher.getSimulationScriptLaunchContent(TEMPLATE, SIMULATIONID, SIMULATIONZIP); + // simulation parameters Assert.assertTrue("String \"" + SIMULATIONID + "\" not found in template", content.indexOf(SIMULATIONID) > 0); - Assert.assertTrue("String \"" + SIMULATIONZIP + "\" not found in template", content.indexOf(SIMULATIONZIP) > 0); + + // isis location + Assert.assertTrue("String \"" + ISISHOME + "\" not found in template", + content.indexOf(ISISHOME) > 0); } } \ No newline at end of file