Search in sources :

Example 46 with Task

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;
}
Also used : Task(com.netflix.titus.api.jobmanager.model.job.Task) TaskState(com.netflix.titus.api.jobmanager.model.job.TaskState)

Example 47 with Task

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);
    });
}
Also used : Trigger(com.netflix.titus.api.jobmanager.service.V3JobOperations.Trigger) DateTimeExt(com.netflix.titus.common.util.DateTimeExt) JobManagerConstants(com.netflix.titus.api.jobmanager.service.JobManagerConstants) ImmutableMap(com.google.common.collect.ImmutableMap) TitusChangeAction(com.netflix.titus.master.jobmanager.service.common.action.TitusChangeAction) Task(com.netflix.titus.api.jobmanager.model.job.Task) JobFunctions(com.netflix.titus.api.jobmanager.model.job.JobFunctions) TitusModelAction(com.netflix.titus.master.jobmanager.service.common.action.TitusModelAction) TaskState(com.netflix.titus.api.jobmanager.model.job.TaskState) EntityHolder(com.netflix.titus.common.framework.reconciler.EntityHolder) ModelActionHolder(com.netflix.titus.common.framework.reconciler.ModelActionHolder) Pair(com.netflix.titus.common.util.tuple.Pair) Map(java.util.Map) JobManagerConfiguration(com.netflix.titus.master.jobmanager.service.JobManagerConfiguration) Preconditions(com.google.common.base.Preconditions) Clock(com.netflix.titus.common.util.time.Clock) TitusModelAction(com.netflix.titus.master.jobmanager.service.common.action.TitusModelAction) EntityHolder(com.netflix.titus.common.framework.reconciler.EntityHolder)

Example 48 with Task

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)));
}
Also used : DirectKubeApiServerIntegrator(com.netflix.titus.master.kubernetes.client.DirectKubeApiServerIntegrator) Task(com.netflix.titus.api.jobmanager.model.job.Task) StatusRuntimeException(io.grpc.StatusRuntimeException) V1Pod(io.kubernetes.client.openapi.models.V1Pod) Job(com.netflix.titus.api.jobmanager.model.job.Job)

Example 49 with Task

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);
}
Also used : Archaius2Ext(com.netflix.titus.common.util.archaius2.Archaius2Ext) StepVerifier(reactor.test.StepVerifier) ConsumptionResult(com.netflix.titus.master.eviction.service.quota.ConsumptionResult) Task(com.netflix.titus.api.jobmanager.model.job.Task) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) EvictionQuota(com.netflix.titus.api.eviction.model.EvictionQuota) EvictionEvent(com.netflix.titus.api.eviction.model.event.EvictionEvent) EvictionException(com.netflix.titus.api.eviction.service.EvictionException) TaskTerminationEvent(com.netflix.titus.api.eviction.model.event.TaskTerminationEvent) Pair(com.netflix.titus.common.util.tuple.Pair) TitusRuntimes(com.netflix.titus.common.runtime.TitusRuntimes) Schedulers(reactor.core.scheduler.Schedulers) Job(com.netflix.titus.api.jobmanager.model.job.Job) TitusQuotasManager(com.netflix.titus.master.eviction.service.quota.TitusQuotasManager) JobDescriptorGenerator.oneTaskBatchJobDescriptor(com.netflix.titus.testkit.model.job.JobDescriptorGenerator.oneTaskBatchJobDescriptor) JobGenerator(com.netflix.titus.testkit.model.job.JobGenerator) JobFunctions(com.netflix.titus.api.jobmanager.model.job.JobFunctions) Reference(com.netflix.titus.api.model.reference.Reference) Test(org.junit.Test) Mockito.times(org.mockito.Mockito.times) ErrorCode(com.netflix.titus.api.eviction.service.EvictionException.ErrorCode) TitusRxSubscriber(com.netflix.titus.testkit.rx.TitusRxSubscriber) Mockito.when(org.mockito.Mockito.when) TaskState(com.netflix.titus.api.jobmanager.model.job.TaskState) Mockito.verify(org.mockito.Mockito.verify) Mockito(org.mockito.Mockito) Flux(reactor.core.publisher.Flux) List(java.util.List) JobComponentStub(com.netflix.titus.testkit.model.job.JobComponentStub) Optional(java.util.Optional) TitusRuntime(com.netflix.titus.common.runtime.TitusRuntime) Task(com.netflix.titus.api.jobmanager.model.job.Task) List(java.util.List) Job(com.netflix.titus.api.jobmanager.model.job.Job) Test(org.junit.Test)

Example 50 with 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);
}
Also used : Task(com.netflix.titus.api.jobmanager.model.job.Task) List(java.util.List) Job(com.netflix.titus.api.jobmanager.model.job.Job) Test(org.junit.Test)

Aggregations

Task (com.netflix.titus.api.jobmanager.model.job.Task)222 Test (org.junit.Test)98 ArrayList (java.util.ArrayList)63 List (java.util.List)62 Job (com.netflix.titus.api.jobmanager.model.job.Job)58 BatchJobTask (com.netflix.titus.api.jobmanager.model.job.BatchJobTask)45 TaskStatus (com.netflix.titus.api.jobmanager.model.job.TaskStatus)45 TaskState (com.netflix.titus.api.jobmanager.model.job.TaskState)42 TitusRuntime (com.netflix.titus.common.runtime.TitusRuntime)38 BatchJobExt (com.netflix.titus.api.jobmanager.model.job.ext.BatchJobExt)34 Pair (com.netflix.titus.common.util.tuple.Pair)32 V1Pod (io.kubernetes.client.openapi.models.V1Pod)32 V3JobOperations (com.netflix.titus.api.jobmanager.service.V3JobOperations)31 ServiceJobTask (com.netflix.titus.api.jobmanager.model.job.ServiceJobTask)29 Optional (java.util.Optional)27 Collections (java.util.Collections)26 Collectors (java.util.stream.Collectors)25 CallMetadata (com.netflix.titus.api.model.callmetadata.CallMetadata)24 HashMap (java.util.HashMap)24 TaskUpdateEvent (com.netflix.titus.api.jobmanager.model.job.event.TaskUpdateEvent)23