use of com.netflix.titus.api.jobmanager.model.job.Task in project titus-control-plane by Netflix.
the class TaskTimeoutChangeActions method getTimeoutStatus.
public static TimeoutStatus getTimeoutStatus(EntityHolder taskHolder, Clock clock) {
Task task = taskHolder.getEntity();
TaskState state = task.getStatus().getState();
if (state != TaskState.Launched && state != TaskState.StartInitiated && state != TaskState.KillInitiated) {
return TimeoutStatus.Ignore;
}
Long deadline = (Long) taskHolder.getAttributes().get(STATE_TAGS.get(state));
if (deadline == null) {
return TimeoutStatus.NotSet;
}
return clock.wallTime() < deadline ? TimeoutStatus.Pending : TimeoutStatus.TimedOut;
}
use of com.netflix.titus.api.jobmanager.model.job.Task in project titus-control-plane by Netflix.
the class TaskTimeoutChangeActions method setTimeout.
public static TitusChangeAction setTimeout(String taskId, TaskState taskState, long timeoutMs, Clock clock) {
String tagName = STATE_TAGS.get(taskState);
Preconditions.checkArgument(tagName != null, "Timeout not tracked for state %s", taskState);
return TitusChangeAction.newAction("setTimeout").id(taskId).trigger(Trigger.Reconciler).summary("Setting timeout for task in state %s: %s", taskState, DateTimeExt.toTimeUnitString(timeoutMs)).callMetadata(JobManagerConstants.RECONCILER_CALLMETADATA.toBuilder().withCallReason("configure timeout").build()).applyModelUpdate(self -> {
TitusModelAction modelAction = TitusModelAction.newModelUpdate(self).taskMaybeUpdate(jobHolder -> jobHolder.findById(taskId).map(taskHolder -> {
EntityHolder newTaskHolder = taskHolder.addTag(tagName, clock.wallTime() + timeoutMs);
if (taskState == TaskState.KillInitiated) {
newTaskHolder = newTaskHolder.addTag(KILL_INITIATED_ATTEMPT_TAG, 0);
}
return Pair.of(jobHolder.addChild(newTaskHolder), newTaskHolder);
}));
return ModelActionHolder.running(modelAction);
});
}
use of com.netflix.titus.api.jobmanager.model.job.Task in project titus-control-plane by Netflix.
the class DefaultSchedulerServiceGrpc method getSchedulingResult.
@Override
public void getSchedulingResult(SchedulingResultRequest request, StreamObserver<com.netflix.titus.grpc.protogen.SchedulingResultEvent> responseObserver) {
String taskId = request.getTaskId();
Pair<Job<?>, Task> jobAndTask = v3JobOperations.findTaskById(taskId).orElse(null);
if (jobAndTask == null) {
responseObserver.onError(new StatusRuntimeException(Status.NOT_FOUND.withDescription("Task not found: " + taskId)));
return;
}
DirectKubeApiServerIntegrator directIntegrator = injector.getInstance(DirectKubeApiServerIntegrator.class);
V1Pod pod = directIntegrator.getPods().get(taskId);
if (pod != null) {
responseObserver.onNext(toGrpcSchedulingResultEvent(pod));
responseObserver.onCompleted();
return;
}
responseObserver.onError(new StatusRuntimeException(Status.NOT_FOUND.withDescription("No scheduling result available for task: " + taskId)));
}
use of com.netflix.titus.api.jobmanager.model.job.Task in project titus-control-plane by Netflix.
the class TaskTerminationExecutorTest method testTerminateTaskWithNoQuota.
@Test
public void testTerminateTaskWithNoQuota() {
Pair<Job, List<Task>> jobAndTask = createAndStartJobWithTasks(1);
Job<?> job = jobAndTask.getLeft();
Task task = jobAndTask.getRight().get(0);
when(quotasManager.tryConsumeQuota(job, task)).thenReturn(ConsumptionResult.rejected("no quota"));
StepVerifier.withVirtualTime(() -> newTerminationExecutor().terminateTask(task.getId(), EVICTION_REASON, "callerContext")).consumeErrorWith(e -> expectEvictionError(e, ErrorCode.NoQuota)).verify();
expectTaskTerminationEvent(task, false);
verify(quotasManager, times(1)).tryConsumeQuota(job, task);
}
use of com.netflix.titus.api.jobmanager.model.job.Task in project titus-control-plane by Netflix.
the class TaskTerminationExecutorTest method testTerminateTaskWithEnoughQuota.
@Test
public void testTerminateTaskWithEnoughQuota() {
Pair<Job, List<Task>> jobAndTask = createAndStartJobWithTasks(1);
Job<?> job = jobAndTask.getLeft();
Task task = jobAndTask.getRight().get(0);
when(quotasManager.findEvictionQuota(Reference.job(job.getId()))).thenReturn(Optional.of(EvictionQuota.jobQuota(job.getId(), 1, "Test")));
when(quotasManager.tryConsumeQuota(job, task)).thenReturn(ConsumptionResult.approved());
StepVerifier.withVirtualTime(() -> newTerminationExecutor().terminateTask(task.getId(), EVICTION_REASON, "callerContext")).verifyComplete();
expectTaskTerminationEvent(task, true);
verify(quotasManager, times(1)).tryConsumeQuota(job, task);
}
Aggregations