@Override public void setLastUpdate(String jobId, OffsetDateTime lastUpdate) { JobInfo jobInfo = jobs.get(jobId); jobs.replace(jobId, jobInfo.copy().setLastUpdated(lastUpdate).build()); }
@Override public void appendMessage(String jobId, JobMessage jobMessage) { JobInfo jobInfo = jobs.get(jobId); jobs.replace(jobId, jobInfo.copy().setLastUpdated(jobMessage.getTimestamp()).addMessage(jobMessage).build()); }
@Test public void shouldKillJob() { OffsetDateTime now = OffsetDateTime.now(clock); JobInfo jobInfo = JobInfo.newJobInfo("superId", "superType", clock, HOSTNAME); when(jobRepository.findOne("superId")).thenReturn(Optional.of(jobInfo)); jobService.killJob("superId"); JobInfo expected = jobInfo.copy().setStatus(JobInfo.JobStatus.DEAD).setStopped(now).setLastUpdated(now).build(); verify(jobMetaService).releaseRunLock("superType"); verify(jobRepository).createOrUpdate(expected); }
@Test public void shouldAppendErrorMessageAndSetErrorStatus() { OffsetDateTime now = OffsetDateTime.now(clock); OffsetDateTime earlier = now.minus(10, MINUTES); JobMessage message = JobMessage.jobMessage(Level.ERROR, "Error: Out of hunk", now); JobInfo jobInfo = defaultJobInfo() .setLastUpdated(earlier) .build(); when(jobRepository.findOne(JOB_ID)).thenReturn(Optional.of(jobInfo)); // when jobService.appendMessage(JOB_ID, message); // then verify(jobRepository).appendMessage(JOB_ID, message); verify(jobRepository).setJobStatus(JOB_ID, JobInfo.JobStatus.ERROR); }
@Test public void shouldNotChangeStatusToOKWhenOnlyAppendingAMessage() { OffsetDateTime now = OffsetDateTime.now(clock); OffsetDateTime earlier = now.minus(10, MINUTES); JobMessage message = JobMessage.jobMessage(Level.INFO, "Some info message", now); JobInfo jobInfo = defaultJobInfo() .setLastUpdated(earlier) .setStatus(JobInfo.JobStatus.SKIPPED) .build(); when(jobRepository.findOne(JOB_ID)).thenReturn(Optional.of(jobInfo)); // when jobService.appendMessage(JOB_ID, message); // then verify(jobRepository).appendMessage(JOB_ID, message); verifyNoMoreInteractions(jobRepository); }
private void stopJob(final String jobId, final JobStatus status) { jobRepository.findOne(jobId).ifPresent((JobInfo jobInfo) -> { jobMetaService.releaseRunLock(jobInfo.getJobType()); final OffsetDateTime now = now(clock); final Builder builder = jobInfo.copy() .setStopped(now) .setLastUpdated(now); if (status != null) { builder.setStatus(status); } jobRepository.createOrUpdate(builder.build()); }); }
@Test public void shouldStopJob() { OffsetDateTime now = OffsetDateTime.now(clock); Clock earlierClock = offset(clock, Duration.of(-1, MINUTES)); JobInfo jobInfo = JobInfo.newJobInfo("superId", "superType", earlierClock, HOSTNAME); when(jobRepository.findOne("superId")).thenReturn(Optional.of(jobInfo)); jobService.stopJob("superId"); JobInfo expected = jobInfo.copy().setStatus(JobInfo.JobStatus.OK).setStopped(now).setLastUpdated(now).build(); verify(jobMetaService).releaseRunLock("superType"); verify(jobRepository).createOrUpdate(expected); }