use of com.hubspot.singularity.SingularityTask in project Singularity by HubSpot.
the class SingularitySchedulerTest method testTaskDestroy.
@Test
public void testTaskDestroy() {
initRequest();
initFirstDeploy();
SingularityTask firstTask = startTask(firstDeploy, 1);
SingularityTask secondTask = startTask(firstDeploy, 2);
SingularityTask thirdTask = startTask(firstDeploy, 3);
taskResource.killTask(secondTask.getTaskId().getId(), Optional.of(new SingularityKillTaskRequest(Optional.of(true), Optional.of("kill -9 bb"), Optional.absent(), Optional.absent(), Optional.absent())), singularityUser);
cleaner.drainCleanupQueue();
killKilledTasks();
Assert.assertEquals(2, taskManager.getNumActiveTasks());
System.out.println(requestManager.getCleanupRequests());
Assert.assertEquals(0, requestManager.getCleanupRequests().size());
Assert.assertEquals(RequestState.ACTIVE, requestManager.getRequest(requestId).get().getState());
}
use of com.hubspot.singularity.SingularityTask in project Singularity by HubSpot.
the class SingularitySchedulerTest method testWaitAfterTaskWorks.
@Test
public void testWaitAfterTaskWorks() {
initRequest();
initFirstDeploy();
SingularityTask task = launchTask(request, firstDeploy, 1, TaskState.TASK_RUNNING);
statusUpdate(task, TaskState.TASK_FAILED);
scheduler.drainPendingQueue();
Assert.assertTrue(taskManager.getPendingTaskIds().get(0).getNextRunAt() - System.currentTimeMillis() < 1000L);
resourceOffers();
long extraWait = 100000L;
saveAndSchedule(request.toBuilder().setWaitAtLeastMillisAfterTaskFinishesForReschedule(Optional.of(extraWait)).setInstances(Optional.of(2)));
resourceOffers();
statusUpdate(taskManager.getActiveTasks().get(0), TaskState.TASK_FAILED);
scheduler.drainPendingQueue();
Assert.assertTrue(taskManager.getPendingTaskIds().get(0).getNextRunAt() - System.currentTimeMillis() > 1000L);
Assert.assertEquals(1, taskManager.getActiveTaskIds().size());
}
use of com.hubspot.singularity.SingularityTask in project Singularity by HubSpot.
the class SingularitySchedulerTest method testBounce.
@Test
public void testBounce() {
initRequest();
requestResource.scale(requestId, new SingularityScaleRequest(Optional.of(3), Optional.absent(), Optional.absent(), Optional.absent(), Optional.absent(), Optional.absent(), Optional.absent(), Optional.absent()), singularityUser);
initFirstDeploy();
SingularityTask taskOne = startTask(firstDeploy, 1);
SingularityTask taskTwo = startTask(firstDeploy, 2);
SingularityTask taskThree = startTask(firstDeploy, 3);
requestResource.bounce(requestId, Optional.absent(), singularityUser);
Assert.assertTrue(requestManager.cleanupRequestExists(requestId));
cleaner.drainCleanupQueue();
Assert.assertTrue(!requestManager.cleanupRequestExists(requestId));
Assert.assertTrue(taskManager.getCleanupTaskIds().size() == 3);
cleaner.drainCleanupQueue();
Assert.assertTrue(!requestManager.cleanupRequestExists(requestId));
Assert.assertTrue(taskManager.getCleanupTaskIds().size() == 3);
resourceOffers();
Assert.assertTrue(taskManager.getActiveTaskIds().size() == 6);
cleaner.drainCleanupQueue();
Assert.assertTrue(taskManager.getCleanupTaskIds().size() == 3);
for (SingularityTask task : taskManager.getActiveTasks()) {
if (!task.getTaskId().equals(taskOne.getTaskId()) && !task.getTaskId().equals(taskTwo.getTaskId()) && !task.getTaskId().equals(taskThree.getTaskId())) {
statusUpdate(task, TaskState.TASK_RUNNING, Optional.of(1L));
}
}
cleaner.drainCleanupQueue();
Assert.assertTrue(taskManager.getCleanupTaskIds().isEmpty());
Assert.assertTrue(taskManager.getKilledTaskIdRecords().size() == 3);
}
use of com.hubspot.singularity.SingularityTask in project Singularity by HubSpot.
the class SingularitySchedulerTest method testBounceWithLoadBalancer.
@Test
public void testBounceWithLoadBalancer() {
initLoadBalancedRequest();
initFirstDeploy();
configuration.setNewTaskCheckerBaseDelaySeconds(1000000);
SingularityTask taskOne = launchTask(request, firstDeploy, 1, TaskState.TASK_RUNNING);
saveLoadBalancerState(BaragonRequestState.SUCCESS, taskOne.getTaskId(), LoadBalancerRequestType.ADD);
requestResource.bounce(requestId, Optional.absent(), singularityUser);
cleaner.drainCleanupQueue();
resourceOffers();
Assert.assertEquals(2, taskManager.getNumActiveTasks());
List<SingularityTaskId> tasks = taskManager.getActiveTaskIds();
tasks.remove(taskOne.getTaskId());
SingularityTaskId taskTwo = tasks.get(0);
cleaner.drainCleanupQueue();
runLaunchedTasks();
cleaner.drainCleanupQueue();
Assert.assertEquals(0, taskManager.getKilledTaskIdRecords().size());
Assert.assertEquals(2, taskManager.getNumActiveTasks());
// add to LB:
saveLoadBalancerState(BaragonRequestState.SUCCESS, taskTwo, LoadBalancerRequestType.ADD);
cleaner.drainCleanupQueue();
Assert.assertEquals(0, taskManager.getKilledTaskIdRecords().size());
Assert.assertEquals(2, taskManager.getNumActiveTasks());
saveLoadBalancerState(BaragonRequestState.SUCCESS, taskOne.getTaskId(), LoadBalancerRequestType.REMOVE);
cleaner.drainCleanupQueue();
Assert.assertEquals(1, taskManager.getKilledTaskIdRecords().size());
killKilledTasks();
Assert.assertEquals(1, taskManager.getNumActiveTasks());
}
use of com.hubspot.singularity.SingularityTask in project Singularity by HubSpot.
the class SingularitySchedulerTest method testCleanerFindsTasksWithSkippedHealthchecks.
@Test
public void testCleanerFindsTasksWithSkippedHealthchecks() {
initRequest();
// set up slaves so scale validate will pass
resourceOffers(2);
SingularityRequest request = requestResource.getRequest(requestId, singularityUser).getRequest();
long now = System.currentTimeMillis();
requestManager.saveHistory(new SingularityRequestHistory(now, Optional.<String>absent(), RequestHistoryType.UPDATED, request.toBuilder().setSkipHealthchecks(Optional.of(true)).setInstances(Optional.of(2)).build(), Optional.<String>absent()));
firstDeploy = initDeploy(new SingularityDeployBuilder(request.getId(), firstDeployId).setCommand(Optional.of("sleep 100")).setHealthcheckUri(Optional.of("http://uri")), System.currentTimeMillis());
SingularityTask taskOne = launchTask(request, firstDeploy, now + 1000, now + 2000, 1, TaskState.TASK_RUNNING);
finishDeploy(new SingularityDeployMarker(requestId, firstDeployId, now + 2000, Optional.<String>absent(), Optional.<String>absent()), firstDeploy);
SingularityRequest updatedRequest = request.toBuilder().setSkipHealthchecks(Optional.<Boolean>absent()).setInstances(Optional.of(2)).build();
requestManager.saveHistory(new SingularityRequestHistory(now + 3000, Optional.<String>absent(), RequestHistoryType.UPDATED, updatedRequest, Optional.<String>absent()));
SingularityTask newTaskTwoWithCheck = prepTask(updatedRequest, firstDeploy, now + 4000, 2);
taskManager.createTaskAndDeletePendingTask(newTaskTwoWithCheck);
statusUpdate(newTaskTwoWithCheck, TaskState.TASK_RUNNING, Optional.of(now + 5000));
taskManager.saveHealthcheckResult(new SingularityTaskHealthcheckResult(Optional.of(200), Optional.of(1000L), now + 6000, Optional.<String>absent(), Optional.<String>absent(), newTaskTwoWithCheck.getTaskId(), Optional.<Boolean>absent()));
SingularityTask unhealthyTaskThree = prepTask(updatedRequest, firstDeploy, now + 4000, 3);
taskManager.createTaskAndDeletePendingTask(unhealthyTaskThree);
statusUpdate(unhealthyTaskThree, TaskState.TASK_RUNNING, Optional.of(now + 5000));
List<SingularityTaskId> activeTaskIds = taskManager.getActiveTaskIdsForRequest(requestId);
List<SingularityTaskId> healthyTaskIds = deployHealthHelper.getHealthyTasks(updatedRequest, Optional.of(firstDeploy), activeTaskIds, false);
Assert.assertTrue(!healthyTaskIds.contains(unhealthyTaskThree.getTaskId()));
// Healthchecked and skip-healthchecked tasks should both be here
Assert.assertEquals(2, healthyTaskIds.size());
Assert.assertEquals(DeployHealth.WAITING, deployHealthHelper.getDeployHealth(updatedRequest, Optional.of(firstDeploy), activeTaskIds, false));
taskManager.saveHealthcheckResult(new SingularityTaskHealthcheckResult(Optional.of(200), Optional.of(1000L), now + 6000, Optional.<String>absent(), Optional.<String>absent(), unhealthyTaskThree.getTaskId(), Optional.<Boolean>absent()));
Assert.assertEquals(DeployHealth.HEALTHY, deployHealthHelper.getDeployHealth(updatedRequest, Optional.of(firstDeploy), activeTaskIds, false));
}
Aggregations