protected Thread buildHook(Path outdir, Runnable onError) { return new Thread(() -> { try { // If the status has not been changed by the method and is still running, we assume that the execution failed. Job.JobStatus status = readJobStatus(outdir); if (status.getName().equalsIgnoreCase(Job.JobStatus.RUNNING)) { writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.ERROR, "Job finished with an error.")); if (onError != null) { onError.run(); } } } catch (IOException e) { logger.error("Error modifying " + AbstractExecutor.JOB_STATUS_FILE, e); } }); }
public Job(String name, String userId, String toolName, String description, String commandLine, File outDir, List<File> input, int release) { // FIXME: Modify this to take into account both toolName and executable for RC2 this(-1, null, name, userId, toolName, Type.ANALYSIS, TimeUtils.getTime(), description, System.currentTimeMillis(), -1, null, null, commandLine, false, new JobStatus(JobStatus.PREPARED), 0, outDir, input, null, null, null, release, null, null); }
writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.RUNNING, "Job has just started")); Runtime.getRuntime().addShutdownHook(hook); } else { writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.DONE, "Job completed")); writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.ERROR, "Job with error : " + e.getMessage()));
writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.RUNNING, "Job has just started")); writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.DONE, "Job completed")); } else { writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.ERROR, "Job with errors: " + exception.getMessage()));
writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.RUNNING, "Job has just started")); Runtime.getRuntime().addShutdownHook(hook); writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.DONE, "Job completed")); } catch (Exception e) { writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.ERROR, "Job with error : " + e.getMessage())); throw new StorageEngineException("Error annotating variants.", e); } finally {
writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.RUNNING, "Job has just started")); Runtime.getRuntime().addShutdownHook(hook); writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.DONE, "Job completed")); writeJobStatus(outdir, new Job.JobStatus(Job.JobStatus.ERROR, "Job with error : " + e.getMessage()));
jobStatus = new Job.JobStatus(Job.JobStatus.ERROR, "Temporal output directory not found"); try { logger.info("Updating job {} from {} to {}", job.getUid(), Job.JobStatus.RUNNING, jobStatus.getName()); String userToken = catalogManager.getUserManager().getSystemTokenForUser(job.getUserId(), sessionId); outputRecorder.recordJobOutput(job, tmpOutdirPath, userToken); outputRecorder.updateJobStatus(job, new Job.JobStatus(status)); cleanPrivateJobInformation(job); } else { outputRecorder.updateJobStatus(job, new Job.JobStatus(status)); if (!status.equals(Job.JobStatus.ERROR)) { logger.info("Removing temporal directory."); outputRecorder.updateJobStatus(job, new Job.JobStatus(Job.JobStatus.ERROR)); } catch (IOException e) { logger.error("Error recording files generated to Catalog", e); outputRecorder.updateJobStatus(job, new Job.JobStatus(Job.JobStatus.ERROR)); } finally { closeSessionId(job);
job.setStatus(ParamUtils.defaultObject(job.getStatus(), new Job.JobStatus(Job.JobStatus.PREPARED))); job.setInput(ParamUtils.defaultObject(job.getInput(), Collections.emptyList())); job.setOutput(ParamUtils.defaultObject(job.getOutput(), Collections.emptyList()));
objectMapper.writer().writeValue(outdir.resolve(JOB_STATUS_FILE).toFile(), new Job.JobStatus(Job.JobStatus.DONE, "Job finished.")); parameters.put(JobDBAdaptor.QueryParams.ERROR_DESCRIPTION.key(), Job.ERROR_DESCRIPTIONS.get(error)); catalogManager.getJobManager().update(job.getUid(), parameters, null, sessionId); objectMapper.writer().writeValue(outdir.resolve(JOB_STATUS_FILE).toFile(), new Job.JobStatus(Job.JobStatus.ERROR, "Job finished with error."));
.setId("job1") .setCreationDate(TimeUtils.getTime()) .setStatus(new Job.JobStatus()); .setId("job2") .setCreationDate(TimeUtils.getTime(oneHourBack)) .setStatus(new Job.JobStatus());
jobStatus = new Job.JobStatus(Job.JobStatus.ERROR, "Temporal output directory not found"); try { logger.info("Updating job {} from {} to {}", job.getUid(), Job.JobStatus.RUNNING, jobStatus.getName()); logger.info("Updating job {} from {} to {}", job.getUid(), Job.JobStatus.RUNNING, status); try { outputRecorder.updateJobStatus(job, new Job.JobStatus(status)); } catch (CatalogException e) { logger.error("{}", e.getMessage(), e); logger.error("{}", e.getMessage(), e); try { outputRecorder.updateJobStatus(job, new Job.JobStatus(Job.JobStatus.ERROR)); } catch (CatalogException e1) { logger.error("{}", e1.getMessage(), e1);
@Test public void updateInputAndOutputFiles() throws Exception { Job job = new Job() .setOutDir(new File().setUid(5)) .setStatus(new Job.JobStatus()); long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); job.setName("jobName1"); QueryResult<Job> insert = catalogJobDBAdaptor.insert(job, studyId, null); List<File> fileInput = Arrays.asList( new File().setUid(5L).setName("file1").setStatus(new File.FileStatus()), new File().setUid(6L).setName("file2").setStatus(new File.FileStatus()), new File().setUid(7L).setName("file3").setStatus(new File.FileStatus()) ); List<File> fileOutput = Arrays.asList( new File().setUid(15L).setName("file1").setStatus(new File.FileStatus()), new File().setUid(16L).setName("file2").setStatus(new File.FileStatus()), new File().setUid(17L).setName("file3").setStatus(new File.FileStatus()) ); ObjectMap params = new ObjectMap() .append(JobDBAdaptor.QueryParams.INPUT.key(), fileInput) .append(JobDBAdaptor.QueryParams.OUTPUT.key(), fileOutput); QueryResult<Job> update = catalogJobDBAdaptor.update(insert.first().getUid(), params, QueryOptions.empty()); assertEquals(3, update.first().getInput().size()); assertEquals(3, update.first().getOutput().size()); assertTrue(Arrays.asList(5L, 6L, 7L).containsAll(update.first().getInput().stream().map(File::getUid).collect(Collectors.toList()))); assertTrue(Arrays.asList(15L, 16L, 17L) .containsAll(update.first().getOutput().stream().map(File::getUid).collect(Collectors.toList()))); }
/** * Job methods * *************************** */ @Test public void testCreateJob() throws CatalogException, IOException { Query query = new Query(StudyDBAdaptor.QueryParams.OWNER.key(), "user"); String studyId = catalogManager.getStudyManager().get(query, null, sessionIdUser).first().getId(); File outDir = catalogManager.getFileManager().createFolder(studyId, Paths.get("jobs", "myJob").toString(), null, true, null, QueryOptions.empty(), sessionIdUser).first(); catalogManager.getJobManager().create(studyId,new Job().setId("myJob").setToolId("samtool").setDescription("description") .setOutDir(outDir).setExecution("echo \"Hello world!\"").setStatus(new Job.JobStatus(Job.JobStatus.PREPARED)), null, sessionIdUser); catalogManager.getJobManager().create(studyId, new Job().setId("myReadyJob").setToolId("samtool").setDescription("description") .setOutDir(outDir).setExecution("echo \"Hello world!\"").setStatus(new Job.JobStatus(Job.JobStatus.READY)), null, sessionIdUser); catalogManager.getJobManager().create(studyId, new Job().setId("myQueuedJob").setToolId("samtool").setDescription("description") .setOutDir(outDir).setExecution("echo \"Hello world!\"").setStatus(new Job.JobStatus(Job.JobStatus.QUEUED)), null, sessionIdUser); catalogManager.getJobManager().create(studyId, new Job().setId("myErrorJob").setToolId("samtool").setDescription("description") .setOutDir(outDir).setExecution("echo \"Hello world!\"").setStatus(new Job.JobStatus(Job.JobStatus.ERROR)), null, sessionIdUser); query = new Query() .append(JobDBAdaptor.QueryParams.STATUS_NAME.key(), Arrays.asList(Job.JobStatus.PREPARED, Job.JobStatus.QUEUED, Job.JobStatus.RUNNING, Job.JobStatus.DONE)); QueryResult<Job> unfinishedJobs = catalogManager.getJobManager().get(String.valueOf(studyId), query, null, sessionIdUser); assertEquals(2, unfinishedJobs.getNumResults()); QueryResult<Job> allJobs = catalogManager.getJobManager().get(String.valueOf(studyId), (Query) null, null, sessionIdUser); assertEquals(4, allJobs.getNumResults()); }
@Test public void createJobTest() throws CatalogDBException { Job job = new Job() .setStatus(new Job.JobStatus()); long studyId = user3.getProjects().get(0).getStudies().get(0).getUid(); job.setId("jobName1"); System.out.println(catalogJobDBAdaptor.insert(job, studyId, null)); // long analysisId = catalogDBAdaptor.getAnalysisId(studyId, "analysis1Alias"); job.setId("jobName2"); System.out.println(catalogJobDBAdaptor.insert(job, studyId, null)); try { catalogJobDBAdaptor.insert(job, -1, null); fail("error: expected exception"); } catch (CatalogDBException e) { System.out.println("correct exception: " + e); } }
public Job(String name, String userId, String executable, Type type, List<File> input, List<File> output, File outDir, Map<String, String> params, int release) { this(-1, null, name, userId, "", type, TimeUtils.getTime(), "", -1, -1, "", executable, "", false, new JobStatus(JobStatus.PREPARED), -1, outDir, input, output, null, params, release, null, null); }
public Job(String name, String toolId, String execution, Type type, String description, Map<String, String> params, Map<String, Object> attributes) { this(-1, null, name, "", toolId, type, TimeUtils.getTime(), description, -1, -1, execution, "", "", false, new JobStatus(), -1, null, null, null, null, params, -1, attributes, null); }