Author: bleny Date: 2010-07-22 09:51:37 +0000 (Thu, 22 Jul 2010) New Revision: 3087 Log: bugfix, t?\195?\169l?\195?\169chargement de isis depuis le web Modified: isis-fish/branches/3.3.0.4-disworksupport/src/main/java/fr/ifremer/isisfish/IsisConfig.java isis-fish/branches/3.3.0.4-disworksupport/src/main/java/fr/ifremer/isisfish/simulator/launcher/DisworkSimulatorLauncher.java isis-fish/branches/3.3.0.4-disworksupport/src/main/resources/log4j.properties Modified: isis-fish/branches/3.3.0.4-disworksupport/src/main/java/fr/ifremer/isisfish/IsisConfig.java =================================================================== --- isis-fish/branches/3.3.0.4-disworksupport/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2010-07-22 07:44:45 UTC (rev 3086) +++ isis-fish/branches/3.3.0.4-disworksupport/src/main/java/fr/ifremer/isisfish/IsisConfig.java 2010-07-22 09:51:37 UTC (rev 3087) @@ -632,6 +632,10 @@ public void setDisworkBootstrapPort(String ip) { setOption(Option.SIMULATOR_DISWORK_BOOTSTRAP_IP.key, ip); } + + public String getDisworkIsisDownloadURL() { + return getOption(Option.SIMULATOR_DISWORK_ISIS_DOWNLOAD_URL.key); + } /** * Get launch.ui option value. @@ -926,6 +930,10 @@ "projectName", null, "simulationReportMail", null, + // allways use the default value to prevent the download of a too old version + // due to a remaining value in the user config file + "simulation.diswork.isis_download_url", null, + }; if (log.isInfoEnabled()) { @@ -1019,6 +1027,7 @@ SIMULATOR_DISWORK_BOOTSTRAP_IP("simulation.diswork.bootstrap.ip", _("isisfish.config.main.simulation.diswork.bootstrap.ip.description"), ""), SIMULATOR_DISWORK_BOOTSTRAP_PORT("simulation.diswork.bootstrap.port", _("isisfish.config.main.simulation.diswork.bootstrap.port.description"), "19000"), SIMULATOR_DISWORK_PORT("simulation.diswork.port", _("isisfish.config.main.simulation.diswork.port.description"), "19000"), + SIMULATOR_DISWORK_ISIS_DOWNLOAD_URL("simulation.diswork.isis_download_url", _("isisfish.config.main.simulation.diswork.isis_download_url.description"), "http://isis-fish.labs.libre-entreprise.org/download/version3/isis-fish-" + getVersion() + "-bin.zip"), /** Application locale (for i18n init). */ LOCALE("locale", _("isisfish.config.main.locale.description"), "fr_FR"), Modified: isis-fish/branches/3.3.0.4-disworksupport/src/main/java/fr/ifremer/isisfish/simulator/launcher/DisworkSimulatorLauncher.java =================================================================== --- isis-fish/branches/3.3.0.4-disworksupport/src/main/java/fr/ifremer/isisfish/simulator/launcher/DisworkSimulatorLauncher.java 2010-07-22 07:44:45 UTC (rev 3086) +++ isis-fish/branches/3.3.0.4-disworksupport/src/main/java/fr/ifremer/isisfish/simulator/launcher/DisworkSimulatorLauncher.java 2010-07-22 09:51:37 UTC (rev 3087) @@ -51,6 +51,9 @@ public DisworkSimulatorLauncher() {} protected synchronized static DisworkDaemon getDaemon() throws RemoteException { + // lazy creation of the daemon. Thus, daemon will not be run when + // isis is used on caparmor or as diswork application + if (disworkDaemon == null) { DisworkConfig config = new DisworkConfig(); config.setBootstrapIp(IsisFish.config.getDisworkBootstrapIp()); @@ -67,6 +70,7 @@ throw new RemoteException("unable to boot diswork FS", e); } + // retrieving all jobs submitted to this daemon last time isis was run try { for (JobDescription job : getDaemon().getAllJobs(ISIS_APPLICATION_NAME)) { jobs.put(job.getJobName(), job); @@ -81,28 +85,40 @@ return disworkDaemon; } - // TODO 20100628 bleny upload application if needed, whatever the version protected synchronized void submitIsisApplication(String isisVersion) { // method is synchronized so two submission at the same time // will not upload isis twice + log.info("submitting isis-fish " + isisVersion + " to diswork"); + String isisDownloadUrlOption = IsisFish.config.getDisworkIsisDownloadURL(); + + URL isisDownloadUrl = null; + InputStream applicationData = null; try { - log.info("submitting isis-fish " + isisVersion + " to diswork"); - URL url = new URL("http://isis-fish.labs.libre-entreprise.org/download/version3/isis-fish-3.3.0..."); + isisDownloadUrl = new URL(isisDownloadUrlOption); + log.debug("downloading isis from " + isisDownloadUrl); + applicationData = isisDownloadUrl.openStream(); getDaemon().submitApplication(ISIS_APPLICATION_NAME, - isisVersion, - url.openStream()); + isisVersion, + applicationData); + + // no exception thrown below, even if it fails we can hope that + // application is already available. If it's not the case, a + // exception will be raised at job submission } catch (MalformedURLException e) { - // hardcoded URL cannot be malformed + log.error("isis can't be downloaded from " + isisDownloadUrlOption + + " malformed URL", e); + } catch (IOException e) { + log.error("unable to download data from " + isisDownloadUrl, e); + IOUtils.closeQuietly(applicationData); } catch (DisworkException e) { - log.error("error while submitting application ", e); - } catch (IOException e) { - log.error("error while submitting application ", e); + log.error("unable to submit application to daemon", e); } } @Override public void simulate(SimulationService simulationService, SimulationItem simulationItem) throws RemoteException { + // check if daemon is available if (closed) { simulationItem.getControl().setText("unable to connect to diswork"); simulationItem.getControl().setStopSimulationRequest(true); @@ -116,19 +132,19 @@ throw new RemoteException("daemon has been closed"); } - + // creating a new job JobDescription jobDescription = new JobDescription(); String simulationId = simulationItem.getControl().getId(); jobDescription.setJobName(simulationId); - // TODO 20100702 bleny use isisVersion - // String isisVersion = simulationItem.getParameter().getIsisFishVersion(); - String isisVersion = "3.3.0.4-SNAPSHOT"; - + // upload isis application to diswork in current version and set it + // as the application for this job + String isisVersion = simulationItem.getParameter().getIsisFishVersion(); simulationItem.getControl().setText("uploading isis " + isisVersion); submitIsisApplication(isisVersion); jobDescription.setApplication(ISIS_APPLICATION_NAME, isisVersion); + // setting input data InputStream simulationZipData; try { simulationZipData = new FileInputStream(simulationItem.getSimulationZip()); @@ -139,10 +155,17 @@ } String simulationZipName = "simulation-" + simulationId + "-preparation.zip"; jobDescription.addInput(simulationZipName, simulationZipData); - + + // setting output data String resultZipName = "simulation-" + simulationId + "-result.zip"; jobDescription.addOutput(resultZipName); + + // setting standard output + String standardOutputName = "simulation-" + simulationId + "-output.txt"; + jobDescription.setStandardOutput(standardOutputName); + jobDescription.addOutput(standardOutputName); + // generating the command-line for this job String isisJarPath = "isis-fish-" + isisVersion + "%sep" + "isis-fish-" + isisVersion + ".jar"; String commandLine = "%java -Xmx2500M -jar" @@ -156,18 +179,16 @@ + " " + simulationZipName + " " + resultZipName; jobDescription.setCommandLine(commandLine); - - String standardOutputName = "simulation-" + simulationId + "-output.txt"; - jobDescription.setStandardOutput(standardOutputName); - jobDescription.addOutput(standardOutputName); - jobs.put(simulationId, jobDescription); - + // finally, submit the job try { log.info("submitting job " + jobDescription.toJSDL()); simulationItem.getControl().setText("submitting job"); getDaemon().submitJob(jobDescription); simulationItem.getControl().setText("job submitted"); + + // adding this job to known job + jobs.put(simulationId, jobDescription); } catch (DisworkException e) { log.error("error while submiting job to diswork", e); throw new RemoteException("error while submiting job to diswork", e); @@ -181,7 +202,7 @@ @Override public int getCheckProgressionInterval() { - return 15; + return 15; // 15 seconds } @Override @@ -201,22 +222,22 @@ OutputStream out = null; try { File tempDir = FileUtil.createTempDirectory("isis-results-" + - jobDescription.getJobName(), null); + jobDescription.getJobName(), ""); Map<String, InputStream> results = getDaemon().getResults(jobDescription); for (String fileName : results.keySet()) { File localFile = new File(tempDir, fileName); - localFile.deleteOnExit(); - log.debug("downloading results in " + localFile.getAbsolutePath()); + log.debug("downloading result in " + localFile.getAbsolutePath()); out = new FileOutputStream(localFile); // copy data from diswork to local FS IOUtils.copy(results.get(fileName), out); if (fileName.endsWith(".zip")) { ZipUtil.uncompress(localFile, SimulationStorage.getSimulationDirectory()); + localFile.deleteOnExit(); } } - // getDaemon().deleteJob(jobDescription); - FileUtil.deleteRecursively(tempDir); + getDaemon().deleteJob(jobDescription); + // FileUtil.deleteRecursively(tempDir); } catch (IOException e) { log.error("unable to write results on the local FS", e); throw new RuntimeException("unable to write results on the local FS", e); @@ -251,6 +272,8 @@ if (getDaemon().isFinished(jobDescription)) { // downloads the results File resultDir = downloadResults(jobDescription); + + // in this dir, look for the control file File controlFile = new File(resultDir, SimulationStorage.CONTROL_FILENAME); log.debug("control file is " + controlFile.getAbsolutePath()); SimulationStorage.readControl(controlFile, control, "stop"); Modified: isis-fish/branches/3.3.0.4-disworksupport/src/main/resources/log4j.properties =================================================================== --- isis-fish/branches/3.3.0.4-disworksupport/src/main/resources/log4j.properties 2010-07-22 07:44:45 UTC (rev 3086) +++ isis-fish/branches/3.3.0.4-disworksupport/src/main/resources/log4j.properties 2010-07-22 09:51:37 UTC (rev 3087) @@ -19,6 +19,7 @@ log4j.logger.simulators=INFO # diswork +log4j.logger.fr.ifremer.isisfish.simulator.launcher.DisworkSimulatorLauncher=DEBUG log4j.logger.org.nuiton.diswork.daemon=DEBUG log4j.logger.org.nuiton.diswork.fs=INFO log4j.logger.org.planx.xmlstore=WARN \ No newline at end of file