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 {
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()); outputRecorder.updateJobStatus(job, jobStatus); } catch (CatalogException e) { 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);
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); } 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")); 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()));
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()); outputRecorder.updateJobStatus(job, jobStatus); } catch (CatalogException e) { 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);
/** * 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 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()))); }
@Override protected String getStatus(Job job) { String status; try { status = SgeManager.status(Objects.toString(job.getResourceManagerAttributes().get(Job.JOB_SCHEDULER_NAME))); } catch (Exception e) { logger.error("Could not obtain the status of the job {} from SGE. Error: {}", job.getUid(), e.getMessage()); return Job.JobStatus.UNKNOWN; } switch (status) { case SgeManager.ERROR: case SgeManager.EXECUTION_ERROR: return Job.JobStatus.ERROR; case SgeManager.FINISHED: return Job.JobStatus.READY; case SgeManager.QUEUED: return Job.JobStatus.QUEUED; case SgeManager.RUNNING: case SgeManager.TRANSFERRED: return Job.JobStatus.RUNNING; case SgeManager.UNKNOWN: default: return job.getStatus().getName(); } }
@Override public String status(Job job) throws Exception { String status = SgeManager.status(Objects.toString(job.getResourceManagerAttributes().get(Job.JOB_SCHEDULER_NAME))); switch (status) { case SgeManager.ERROR: case SgeManager.EXECUTION_ERROR: return Job.JobStatus.ERROR; case SgeManager.FINISHED: return Job.JobStatus.READY; case SgeManager.QUEUED: return Job.JobStatus.QUEUED; case SgeManager.RUNNING: case SgeManager.TRANSFERRED: return Job.JobStatus.RUNNING; case SgeManager.UNKNOWN: default: return job.getStatus().getName(); } } }
public void updateJobStatus(Job job, Job.JobStatus jobStatus) throws CatalogException { if (jobStatus != null) { if (jobStatus.getName().equalsIgnoreCase(Job.JobStatus.DONE)) { jobStatus.setName(Job.JobStatus.READY); jobStatus.setMessage("The job has finished"); } else if (jobStatus.getName().equalsIgnoreCase(Job.JobStatus.ERROR)) { jobStatus.setName(Job.JobStatus.ERROR); jobStatus.setMessage("The job finished with an error"); } else { logger.error("This block should never be executed. Accepted status in " + JOB_STATUS_FILE + " file are DONE and ERROR"); jobStatus.setName(Job.JobStatus.ERROR); jobStatus.setMessage("The finished with an unexpected error"); } // ObjectMap params = new ObjectMap(JobDBAdaptor.QueryParams.STATUS.key(), jobStatus); // catalogManager.getJobManager().update(job.getId(), params, new QueryOptions(), sessionId); Study study = catalogManager.getJobManager().getStudy(job, sessionId); catalogManager.getJobManager().setStatus(study.getFqn(), job.getId(), jobStatus.getName(), jobStatus.getMessage(), sessionId); } else { logger.error("This code should never be executed."); throw new CatalogException("Job status = null"); } }
@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 String status(Path jobOutput, Job job) { Path jobStatusFilePath = jobOutput.resolve(JOB_STATUS_FILE); if (!jobStatusFilePath.toFile().exists()) { return getStatus(job); } // File exists try { Job.JobStatus jobStatus = objectReader.readValue(jobStatusFilePath.toFile()); return jobStatus.getName(); } catch (IOException e) { logger.warn("Job status file could not be read."); return getStatus(job); } }
default String status(Job job) throws Exception { return job.getStatus().getName(); }
public void setStatus(String studyStr, String id, String status, String message, String sessionId) throws CatalogException { ParamUtils.checkParameter(sessionId, "sessionId"); MyResource resource = getUid(id, studyStr, sessionId); authorizationManager.checkJobPermission(resource.getStudy().getUid(), resource.getResource().getUid(), resource.getUser(), JobAclEntry.JobPermissions.UPDATE); if (status != null && !Job.JobStatus.isValid(status)) { throw new CatalogException("The status " + status + " is not valid job status."); } ObjectMap parameters = new ObjectMap(); parameters.putIfNotNull(JobDBAdaptor.QueryParams.STATUS_NAME.key(), status); parameters.putIfNotNull(JobDBAdaptor.QueryParams.STATUS_MSG.key(), message); jobDBAdaptor.update(resource.getResource().getUid(), parameters, QueryOptions.empty()); auditManager.recordUpdate(AuditRecord.Resource.job, resource.getResource().getUid(), resource.getUser(), parameters, null, null); }
private void checkJobCanBeDeleted(Job job) throws CatalogException { switch (job.getStatus().getName()) { case Job.JobStatus.DELETED: throw new CatalogException("Job already deleted."); case Job.JobStatus.PREPARED: case Job.JobStatus.RUNNING: case Job.JobStatus.QUEUED: throw new CatalogException("The status of the job is " + job.getStatus().getName() + ". Please, stop the job before deleting it."); case Job.JobStatus.DONE: case Job.JobStatus.ERROR: case Job.JobStatus.READY: default: break; } }