use of com.hubspot.singularity.SingularityPendingTaskId in project Singularity by HubSpot.
the class SingularitySchedulerTest method testOnDemandRunNowJobRespectsSpecifiedRunAtTime.
@Test
public void testOnDemandRunNowJobRespectsSpecifiedRunAtTime() {
initOnDemandRequest();
initFirstDeploy();
long requestedLaunchTime = System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(10);
requestResource.scheduleImmediately(singularityUser, requestId, new SingularityRunNowRequestBuilder().setRunAt(requestedLaunchTime).build());
scheduler.drainPendingQueue();
SingularityPendingTaskId task = taskManager.getPendingTaskIds().get(0);
long runAt = task.getNextRunAt();
Assert.assertEquals(requestedLaunchTime, runAt);
}
use of com.hubspot.singularity.SingularityPendingTaskId in project Singularity by HubSpot.
the class SingularitySchedulerTest method testScheduledRunNowJobRespectsSpecifiedRunAtTime.
@Test
public void testScheduledRunNowJobRespectsSpecifiedRunAtTime() {
initScheduledRequest();
initFirstDeploy();
long requestedLaunchTime = System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(10);
requestResource.scheduleImmediately(singularityUser, requestId, new SingularityRunNowRequestBuilder().setRunAt(requestedLaunchTime).build());
scheduler.drainPendingQueue();
SingularityPendingTaskId task = taskManager.getPendingTaskIds().get(0);
long runAt = task.getNextRunAt();
Assert.assertEquals(requestedLaunchTime, runAt);
}
use of com.hubspot.singularity.SingularityPendingTaskId in project Singularity by HubSpot.
the class SingularitySchedulerTest method testPriorityFreezeKillsActiveTasks.
@Test
public void testPriorityFreezeKillsActiveTasks() {
final SingularityRequest lowPriorityRequest = new SingularityRequestBuilder("lowPriorityRequest", RequestType.WORKER).setTaskPriorityLevel(Optional.of(.25)).build();
saveRequest(lowPriorityRequest);
final SingularityRequest mediumPriorityRequest = new SingularityRequestBuilder("mediumPriorityRequest", RequestType.WORKER).setTaskPriorityLevel(Optional.of(.5)).build();
saveRequest(mediumPriorityRequest);
final SingularityRequest highPriorityRequest = new SingularityRequestBuilder("highPriorityRequest", RequestType.WORKER).setTaskPriorityLevel(Optional.of(.75)).build();
saveRequest(highPriorityRequest);
final SingularityDeploy lowPriorityDeploy = initAndFinishDeploy(lowPriorityRequest, "lowPriorityDeploy");
final SingularityDeploy mediumPriorityDeploy = initAndFinishDeploy(mediumPriorityRequest, "mediumPriorityDeploy");
SingularityDeploy highPriorityDeploy = initAndFinishDeploy(highPriorityRequest, "highPriorityDeploy");
final SingularityTask lowPriorityTask = launchTask(lowPriorityRequest, lowPriorityDeploy, 2, 1, TaskState.TASK_RUNNING);
final SingularityTask mediumPriorityTask = launchTask(mediumPriorityRequest, mediumPriorityDeploy, 1, 1, TaskState.TASK_RUNNING);
final SingularityTask highPriorityTask = launchTask(highPriorityRequest, highPriorityDeploy, 10, 1, TaskState.TASK_RUNNING);
// priority freeze of .5 means that lowPriorityRequest's task should have a cleanup
priorityResource.createPriorityFreeze(singularityUser, new SingularityPriorityFreeze(.5, true, Optional.of("test"), Optional.absent()));
// perform the killing
priorityKillPoller.runActionOnPoll();
// assert lowPriorityRequest has a PRIORITY_KILL task cleanup and that mediumPriorityRequest and highPriorityRequest should not have cleanups
Assert.assertEquals(TaskCleanupType.PRIORITY_KILL, taskManager.getTaskCleanup(lowPriorityTask.getTaskId().getId()).get().getCleanupType());
Assert.assertEquals(false, taskManager.getTaskCleanup(mediumPriorityTask.getTaskId().getId()).isPresent());
Assert.assertEquals(false, taskManager.getTaskCleanup(highPriorityTask.getTaskId().getId()).isPresent());
// kill task(s) with cleanups
cleaner.drainCleanupQueue();
killKilledTasks();
// assert lowPriorityTask was killed, mediumPriorityTask and highPriorityTask are still running
Assert.assertEquals(ExtendedTaskState.TASK_KILLED, taskManager.getTaskHistory(lowPriorityTask.getTaskId()).get().getLastTaskUpdate().get().getTaskState());
Assert.assertEquals(ExtendedTaskState.TASK_RUNNING, taskManager.getTaskHistory(mediumPriorityTask.getTaskId()).get().getLastTaskUpdate().get().getTaskState());
Assert.assertEquals(ExtendedTaskState.TASK_RUNNING, taskManager.getTaskHistory(highPriorityTask.getTaskId()).get().getLastTaskUpdate().get().getTaskState());
// assert lowPriorityRequest has a pending task
final SingularityPendingTaskId pendingTaskId = taskManager.getPendingTaskIds().get(0);
Assert.assertEquals(PendingType.TASK_DONE, pendingTaskId.getPendingType());
Assert.assertEquals(lowPriorityRequest.getId(), pendingTaskId.getRequestId());
// end the priority freeze
priorityResource.deleteActivePriorityFreeze(singularityUser);
// launch task(s)
scheduler.drainPendingQueue();
resourceOffers();
// assert lowPriorityRequest has a new task running
Assert.assertNotEquals(lowPriorityTask.getTaskId(), taskManager.getActiveTaskIdsForRequest(lowPriorityRequest.getId()).get(0).getId());
}
use of com.hubspot.singularity.SingularityPendingTaskId in project Singularity by HubSpot.
the class SingularityDeploysTest method testAfterDeployWaitsForScheduledTaskToFinish.
@Test
public void testAfterDeployWaitsForScheduledTaskToFinish() {
initScheduledRequest();
initFirstDeploy();
SingularityTask firstTask = launchTask(request, firstDeploy, 1, TaskState.TASK_RUNNING);
Assert.assertTrue(taskManager.getPendingTasks().isEmpty());
Assert.assertTrue(taskManager.getActiveTaskIds().contains(firstTask.getTaskId()));
Assert.assertEquals(1, taskManager.getActiveTaskIds().size());
Assert.assertTrue(taskManager.getCleanupTaskIds().isEmpty());
deploy("nextDeployId");
deployChecker.checkDeploys();
scheduler.drainPendingQueue();
// no second task should be scheduled
Assert.assertTrue(taskManager.getPendingTasks().isEmpty());
Assert.assertTrue(taskManager.getActiveTaskIds().contains(firstTask.getTaskId()));
Assert.assertEquals(1, taskManager.getActiveTaskIds().size());
Assert.assertTrue(!taskManager.getCleanupTaskIds().isEmpty());
statusUpdate(firstTask, TaskState.TASK_FINISHED);
scheduler.drainPendingQueue();
cleaner.drainCleanupQueue();
Assert.assertTrue(!taskManager.getPendingTasks().isEmpty());
Assert.assertTrue(taskManager.getActiveTaskIds().isEmpty());
Assert.assertTrue(taskManager.getCleanupTaskIds().isEmpty());
SingularityPendingTaskId pendingTaskId = taskManager.getPendingTaskIds().get(0);
Assert.assertEquals("nextDeployId", pendingTaskId.getDeployId());
Assert.assertEquals(requestId, pendingTaskId.getRequestId());
}
use of com.hubspot.singularity.SingularityPendingTaskId in project Singularity by HubSpot.
the class SingularityDeploysTest method testCanceledDeployTasksStayActiveUntilReplaced.
@Test
public void testCanceledDeployTasksStayActiveUntilReplaced() {
initRequest();
SingularityRequest request = requestResource.getRequest(requestId, singularityUser).getRequest();
requestResource.postRequest(request.toBuilder().setInstances(Optional.of(2)).build(), singularityUser);
initFirstDeploy();
SingularityTask firstTask = launchTask(request, firstDeploy, 1, TaskState.TASK_RUNNING);
SingularityTask secondTask = launchTask(request, firstDeploy, 2, TaskState.TASK_RUNNING);
deploy(secondDeployId, Optional.<Boolean>absent(), Optional.of(1), Optional.<Boolean>absent(), false);
deployChecker.checkDeploys();
scheduler.drainPendingQueue();
Assert.assertEquals(1, taskManager.getPendingTaskIds().size());
resourceOffers();
Assert.assertEquals(1, taskManager.getActiveTaskIdsForDeploy(requestId, secondDeployId).size());
SingularityTaskId firstNewTaskId = taskManager.getActiveTaskIdsForDeploy(requestId, secondDeployId).get(0);
statusUpdate(taskManager.getTask(firstNewTaskId).get(), TaskState.TASK_RUNNING);
deployChecker.checkDeploys();
Assert.assertEquals(1, taskManager.getCleanupTaskIds().size());
Assert.assertTrue(taskManager.getCleanupTaskIds().contains(firstTask.getTaskId()));
SingularityDeployProgress deployProgressStepOne = deployManager.getPendingDeploys().get(0).getDeployProgress().get();
Assert.assertTrue(deployProgressStepOne.isStepComplete());
Assert.assertEquals(1, deployProgressStepOne.getTargetActiveInstances());
cleaner.drainCleanupQueue();
statusUpdate(firstTask, TaskState.TASK_KILLED);
deployChecker.checkDeploys();
deployResource.cancelDeploy(singularityUser, requestId, secondDeployId);
deployChecker.checkDeploys();
scheduler.drainPendingQueue();
List<SingularityPendingTaskId> pendingTaskIds = taskManager.getPendingTaskIds();
Assert.assertEquals(1, pendingTaskIds.size());
Assert.assertEquals(firstDeployId, pendingTaskIds.get(0).getDeployId());
cleaner.drainCleanupQueue();
List<SingularityTaskId> cleanupTaskIds = taskManager.getCleanupTaskIds();
Assert.assertEquals(1, cleanupTaskIds.size());
Assert.assertEquals(secondDeployId, cleanupTaskIds.get(0).getDeployId());
resourceOffers();
for (SingularityTaskId taskId : taskManager.getActiveTaskIdsForDeploy(requestId, firstDeployId)) {
statusUpdate(taskManager.getTask(taskId).get(), TaskState.TASK_RUNNING);
}
cleaner.drainCleanupQueue();
Assert.assertEquals(0, taskManager.getCleanupTaskIds().size());
Assert.assertEquals(2, taskManager.getActiveTaskIdsForDeploy(requestId, firstDeployId).size());
}
Aggregations