use of uk.gov.gchq.gaffer.jobtracker.Repeat in project Gaffer by gchq.
the class JobControllerIT method shouldCorrectlyDoAndThenCancelScheduledJob.
@Test
public void shouldCorrectlyDoAndThenCancelScheduledJob() throws IOException, InterruptedException {
// When
final Repeat repeat = new Repeat(1, 2, TimeUnit.SECONDS);
Job job = new Job(repeat, new OperationChain.Builder().first(new GetAllElements()).build());
final ResponseEntity<JobDetail> jobSchedulingResponse = post("/graph/jobs/schedule", job, JobDetail.class);
JobDetail jobDetailParent = jobSchedulingResponse.getBody();
// Then
assertEquals(201, jobSchedulingResponse.getStatusCode().value());
String parentJobId = jobDetailParent.getJobId();
// Wait for first scheduled to run
Thread.sleep(1500);
final ResponseEntity<List> getAllJobDetailsResponse = post("/graph/operations/execute", new GetAllJobDetails(), List.class);
Iterable<JobDetail> jobDetails = deserialiseJobDetailIterable(getAllJobDetailsResponse.getBody());
for (JobDetail jobDetail : jobDetails) {
if (null != jobDetail.getParentJobId() && jobDetail.getParentJobId().equals(parentJobId)) {
assertEquals(JobStatus.FINISHED, jobDetail.getStatus());
}
if (jobDetail.getJobId().equals(parentJobId)) {
assertEquals(JobStatus.SCHEDULED_PARENT, jobDetail.getStatus());
}
}
post("/graph/operations/execute", new CancelScheduledJob.Builder().jobId(parentJobId).build(), Set.class);
final Iterable<JobDetail> cancelledJobDetails = deserialiseJobDetailIterable(post("/graph/operations/execute", new GetAllJobDetails(), List.class).getBody());
for (JobDetail jobDetail : cancelledJobDetails) {
if (parentJobId.equals(jobDetail.getJobId())) {
assertEquals(JobStatus.CANCELLED, jobDetail.getStatus());
}
}
}
use of uk.gov.gchq.gaffer.jobtracker.Repeat in project Gaffer by gchq.
the class GraphTest method shouldThrowExceptionOnExecuteJobUsingJobWithANullOperation.
@Test
public void shouldThrowExceptionOnExecuteJobUsingJobWithANullOperation() throws OperationException {
// Given
final Context context = new Context();
final Graph graph = new Graph.Builder().config(new GraphConfig.Builder().graphId(GRAPH_ID).build()).storeProperties(StreamUtil.storeProps(getClass())).addSchemas(StreamUtil.schemas(getClass())).build();
final Job job = new Job(new Repeat(), new OperationChain<>());
// When / Then
assertThatIllegalArgumentException().isThrownBy(() -> graph.executeJob(job, context)).withMessage("An operation is required");
}
use of uk.gov.gchq.gaffer.jobtracker.Repeat in project Gaffer by gchq.
the class StoreTest method shouldRescheduleJobsCorrectlyWhenInitialisationCountIs.
private void shouldRescheduleJobsCorrectlyWhenInitialisationCountIs(final int initialisationCount) throws Exception {
// Given
final StoreProperties properties = mock(StoreProperties.class);
given(properties.getJobTrackerEnabled()).willReturn(true);
given(properties.getJobExecutorThreadCount()).willReturn(1);
final Repeat repeat = new Repeat(0, 100, TimeUnit.SECONDS);
final OperationChain opChain = new OperationChain.Builder().first(new DiscardOutput()).build();
final User user = new User.Builder().userId("testUser").opAuth("opAuth").dataAuth("dataAuth").build();
final JobDetail scheduledJobDetail = new JobDetail.Builder().jobId("jobId").user(user).opChain(opChain.toOverviewString()).serialisedOperationChain(opChain).repeat(repeat).build();
given(jobTracker.getAllScheduledJobs()).willReturn(new WrappedCloseableIterable(singletonList(scheduledJobDetail)));
StoreImpl2 store = new StoreImpl2();
// When - initialise store
for (int i = 0; i < initialisationCount; i++) {
store.initialise("graphId", schema, properties);
}
ScheduledExecutorService service = store.getExecutorService();
// Then - assert scheduled
final ArgumentCaptor<ScheduledJobRunnable> scheduledJobRunnableCaptor = ArgumentCaptor.forClass(ScheduledJobRunnable.class);
verify(service).scheduleAtFixedRate(scheduledJobRunnableCaptor.capture(), eq(repeat.getInitialDelay()), eq(repeat.getRepeatPeriod()), eq(repeat.getTimeUnit()));
assertEquals(scheduledJobDetail, scheduledJobRunnableCaptor.getValue().getJobDetail());
assertEquals(user, scheduledJobRunnableCaptor.getValue().getContext().getUser());
assertArrayEquals(JSONSerialiser.serialise(opChain), JSONSerialiser.serialise(scheduledJobRunnableCaptor.getValue().getOperationChain()));
}
use of uk.gov.gchq.gaffer.jobtracker.Repeat in project Gaffer by gchq.
the class StoreTest method shouldCorrectlySetUpScheduledJobDetail.
@Test
public void shouldCorrectlySetUpScheduledJobDetail() throws Exception {
// Given
final StoreProperties properties = mock(StoreProperties.class);
given(properties.getJobTrackerEnabled()).willReturn(true);
given(properties.getJobExecutorThreadCount()).willReturn(1);
StoreImpl2 store = new StoreImpl2();
store.initialise("graphId", schema, properties);
final Repeat repeat = new Repeat(0, 100, TimeUnit.SECONDS);
final OperationChain opChain = new OperationChain.Builder().first(new DiscardOutput()).build();
final Context context = new Context(user);
final String operationChainOverviewString = opChain.toOverviewString();
final String serialisedOperationChain = new String(JSONSerialiser.serialise(opChain), Charset.forName(CommonConstants.UTF_8));
// When - setup job
JobDetail parentJobDetail = store.executeJob(new Job(repeat, opChain), context);
ScheduledExecutorService service = store.getExecutorService();
// Then - assert scheduled
verify(service).scheduleAtFixedRate(any(Runnable.class), eq(repeat.getInitialDelay()), eq(repeat.getRepeatPeriod()), eq(repeat.getTimeUnit()));
// Then - assert job detail is as expected
assertEquals(JobStatus.SCHEDULED_PARENT, parentJobDetail.getStatus());
assertEquals(operationChainOverviewString, parentJobDetail.getOpChain());
assertEquals(serialisedOperationChain, parentJobDetail.getSerialisedOperationChain());
assertEquals(context.getUser(), parentJobDetail.getUser());
}
use of uk.gov.gchq.gaffer.jobtracker.Repeat in project Gaffer by gchq.
the class JobServiceV2IT method shouldCorrectlyDoAndThenCancelScheduledJob.
@Test
public void shouldCorrectlyDoAndThenCancelScheduledJob() throws IOException, InterruptedException {
// When
final Repeat repeat = new Repeat(1, 2, TimeUnit.SECONDS);
Job job = new Job(repeat, new OperationChain.Builder().first(new GetAllElements()).build());
final Response jobSchedulingResponse = client.scheduleJob(job);
JobDetail jobSchedulingDetail = jobSchedulingResponse.readEntity(new GenericType<JobDetail>() {
});
// Then
assertEquals(201, jobSchedulingResponse.getStatus());
String parentJobId = jobSchedulingDetail.getJobId();
// Wait for first scheduled to run
Thread.sleep(1500);
final Response getAllJobDetailsResponse = client.executeOperation(new GetAllJobDetails());
List<JobDetail> jobDetails = getAllJobDetailsResponse.readEntity(new GenericType<List<JobDetail>>() {
});
for (JobDetail jobDetail : jobDetails) {
if (null != jobDetail.getParentJobId() && jobDetail.getParentJobId().equals(parentJobId)) {
assertEquals(JobStatus.FINISHED, jobDetail.getStatus());
}
if (jobDetail.getJobId().equals(parentJobId)) {
assertEquals(JobStatus.SCHEDULED_PARENT, jobDetail.getStatus());
}
}
client.executeOperation(new CancelScheduledJob.Builder().jobId(parentJobId).build());
final Response getAllJobDetailsResponseAfterCancelled = client.executeOperation(new GetAllJobDetails());
List<JobDetail> jobDetailsAfterCancelled = getAllJobDetailsResponseAfterCancelled.readEntity(new GenericType<List<JobDetail>>() {
});
for (JobDetail jobDetail : jobDetailsAfterCancelled) {
if (parentJobId.equals(jobDetail.getJobId())) {
assertEquals(JobStatus.CANCELLED, jobDetail.getStatus());
}
}
}
Aggregations