Author: chatellier Date: 2008-12-24 14:12:33 +0000 (Wed, 24 Dec 2008) New Revision: 1722 Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationExecutor.java isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncher.java isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties Log: Correction du thread de monitoring des simulations distantes Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java 2008-12-24 09:51:58 UTC (rev 1721) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/datastore/JavaSourceStorage.java 2008-12-24 14:12:33 UTC (rev 1722) @@ -84,7 +84,8 @@ } /** - * Compile cette classe dans le répertoire par defaut de compilation ({@link IsisConfig#getCompileDirectory()}) + * Compile cette classe dans le répertoire par defaut de compilation + * ({@link fr.ifremer.isisfish.IsisConfig#getCompileDirectory()}) * * @param force si vrai alors meme si le fichier destination est plus recent * la compilation aura lieu Modified: isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationExecutor.java =================================================================== --- isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationExecutor.java 2008-12-24 09:51:58 UTC (rev 1721) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SimulationExecutor.java 2008-12-24 14:12:33 UTC (rev 1722) @@ -35,7 +35,7 @@ * <p> * Les fonctionnalites en plus par rapport a un {@link ThreadPoolExecutor} sont: * <li> la possibilite de suspendre l'executor puis ensuite de le relancer - * <li> l'utilisation de beforeExecute pour fixer le {@link SimulationLauncher} + * <li> l'utilisation de beforeExecute pour fixer le {@link SimulatorLauncher} * du job * <p> * Il est aussi possible d'ecoute l'etat de l'attribut pause 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 2008-12-24 09:51:58 UTC (rev 1721) +++ isis-fish/trunk/src/main/java/fr/ifremer/isisfish/simulator/launcher/SshSimulatorLauncher.java 2008-12-24 14:12:33 UTC (rev 1722) @@ -137,6 +137,11 @@ control); launchSimulation(sshSession, simulationService, control, remotePath); + + // force thread to stop + synchronized(control) { + control.stopSimulation(); + } } } catch (JSchException e) { if (log.isErrorEnabled()) { @@ -487,10 +492,11 @@ while (true) { while (in.available() > 0) { int i = in.read(tmp, 0, 1024); - if (i < 0) + if (i < 0) { break; + } if (log.isInfoEnabled()) { - log.info(new String(tmp, 0, i)); + log.info(_("isisfish.error.simulation.remote.output") + new String(tmp, 0, i)); } } if (channel.isClosed()) { @@ -537,8 +543,8 @@ */ protected class RemoteSSHControlThread implements Runnable { - /** Sleep 2s */ - protected static final int SLEEPTIME = 2000; + /** Sleep 1s */ + protected static final int SLEEPTIME = 1000; /** Opened ssh session */ protected Session sshSession; @@ -574,14 +580,28 @@ File controlFile = downloadControlFile(control.getId()); if (controlFile != null) { - // on ne lit pas le stop, car le stop ne peut-etre appeler - // que par l'utilisateur qui est de ce cote de la machine - SimulationStorage.readControl(controlFile, control, - "stop"); + if(log.isDebugEnabled()) { + log.debug("Control have been downloaded : " + controlFile.getAbsolutePath()); + } + + synchronized (control) { + // le thread principal a pu le modifier pendant le sleep + if(control.isRunning()) { + // on ne lit pas le stop, car le stop ne peut-etre appeler + // que par l'utilisateur qui est de ce cote de la machine + SimulationStorage.readControl(controlFile, control, + "stop"); + } + } // deleteTempFile controlFile.delete(); } + else { + if(log.isDebugEnabled()) { + log.debug("Control can't have been downloaded"); + } + } } catch (InterruptedException e) { if (log.isErrorEnabled()) { @@ -592,6 +612,7 @@ log.error("Error while reading control file", e); } } + synchronized (control) { running = control.isRunning(); } @@ -605,7 +626,7 @@ * ScpFrom code taken from : * http://www.jcraft.com/jsch/examples/ScpFrom.java * - * @return downloaded temp file (file have to be manualy deleted) + * @return downloaded temp file (file have to be manually deleted) * @throws IOException */ protected File downloadControlFile(String simulationId) @@ -627,7 +648,7 @@ try { // exec 'scp -f rfile' remotely - String command = "scp -f " + remoteFile; + String command = "scp -f \"" + remoteFile + "\""; Channel channel = sshSession.openChannel("exec"); ((ChannelExec) channel).setCommand(command); @@ -680,13 +701,15 @@ out.flush(); // read a content of lfile - fos = new FileOutputStream(localFile); + fos = new FileOutputStream(tempFile); int foo; while (true) { - if (buf.length < filesize) + if (buf.length < filesize) { foo = buf.length; - else + } + else { foo = (int) filesize; + } foo = in.read(buf, 0, foo); if (foo < 0) { // error @@ -694,13 +717,14 @@ } fos.write(buf, 0, foo); filesize -= foo; - if (filesize == 0L) + if (filesize == 0L) { break; + } } fos.close(); fos = null; - if (checkAck(in) != 0) { + if (checkAck(in) == 0) { localFile = tempFile; } Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2008-12-24 09:51:58 UTC (rev 1721) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-en_GB.properties 2008-12-24 14:12:33 UTC (rev 1722) @@ -316,6 +316,7 @@ isisfish.error.simulation.log.openAppender=could not open appender of simulation %1$s for reason %2$s isisfish.error.simulation.remote.global=Can't launch a simulation on remote server isisfish.error.simulation.remote.launch=An error occurs when launching remote simulation +isisfish.error.simulation.remote.output=Caparmor > isisfish.error.simulation.remote.upload=Can't upload simulation %s on %s@%s isisfish.error.simulation.remote.upload.stream=Stream error detected \: %s isisfish.error.simulation.remote.wrongportvalue=Connection port value is incorrect \: %s Modified: isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties =================================================================== --- isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2008-12-24 09:51:58 UTC (rev 1721) +++ isis-fish/trunk/src/main/resources/i18n/isis-fish-fr_FR.properties 2008-12-24 14:12:33 UTC (rev 1722) @@ -316,6 +316,7 @@ isisfish.error.simulation.log.openAppender=n'a pas pu ouvrir l'appender de la simulation %1$s pour la raison %2$s isisfish.error.simulation.remote.global=Impossible de lancer une simulation sur serveur distant isisfish.error.simulation.remote.launch=Une erreur est survenue lors du lancement de la simulation +isisfish.error.simulation.remote.output=Caparmor > isisfish.error.simulation.remote.upload=Impossible d'envoyer la simulation %s sur %s@%s isisfish.error.simulation.remote.upload.stream=Une erreur de flux a \u00E9t\u00E9 d\u00E9tect\u00E9e \: %s isisfish.error.simulation.remote.wrongportvalue=Le port de connexion a une valeur incorrecte \: %s