package com.breakersoft.plow.dispatcher.pipeline;
import org.slf4j.Logger;
import com.breakersoft.plow.ExitStatus;
import com.breakersoft.plow.Signal;
import com.breakersoft.plow.Task;
import com.breakersoft.plow.dispatcher.DispatchService;
import com.breakersoft.plow.dispatcher.domain.DispatchProc;
import com.breakersoft.plow.thrift.TaskState;
public class AbortedTaskCommand extends PipelineCommand {
private static final Logger logger =
org.slf4j.LoggerFactory.getLogger(AbortedTaskCommand.class);
private final Task task;
private final DispatchProc proc;
private final DispatchService dispatchService;
public AbortedTaskCommand(DispatchProc proc, Task task, DispatchService dispatchService) {
super(task.getJobId());
this.proc = proc;
this.task = task;
this.dispatchService = dispatchService;
}
@Override
public void process() {
try {
dispatchService.stopTask(task, TaskState.WAITING, ExitStatus.FAIL, Signal.ABORTED_TASK);
} catch (RuntimeException e) {
logger.warn("Failed to stop and abort task: {}, unexpected {}", task, e);
}
// Unassign the proc from the task.
dispatchService.unassignProc(proc);
// Mark it for deallocation.
dispatchService.markAsDeallocated(proc);
}
}