package cz.cuni.mff.d3s.been.manager.msg; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import cz.cuni.mff.d3s.been.cluster.context.ClusterContext; import cz.cuni.mff.d3s.been.core.task.TaskEntry; import cz.cuni.mff.d3s.been.core.task.TaskState; import cz.cuni.mff.d3s.been.core.task.TaskType; import cz.cuni.mff.d3s.been.manager.action.Actions; import cz.cuni.mff.d3s.been.manager.action.TaskAction; /** * Messages which handles changes of task states. * * @author Martin Sixta */ final class TaskChangedMessage extends AbstractEntryTaskMessage { private static final Logger log = LoggerFactory.getLogger(TaskChangedMessage.class); /** * Creates TaskChangedMessage * * @param entry * targeted task entry */ public TaskChangedMessage(TaskEntry entry) { super(entry); } @Override public TaskAction createAction(ClusterContext ctx) { TaskState state = this.getEntry().getState(); if (state == TaskState.SUBMITTED || state == TaskState.WAITING) return Actions.createScheduleTaskAction(ctx, getEntry()); if (this.getEntry().getTaskDescriptor().getType() == TaskType.BENCHMARK) { if (state == TaskState.ABORTED) { // a benchmark generator task has failed log.info("BENCHMARK GENERATOR TASK ID {} FAILED", this.getEntry().getId()); return Actions.createResubmitBenchmarkAction(ctx, getEntry()); } } if (state == TaskState.FINISHED || state == TaskState.ABORTED) { return Actions.createTaskContextCheckerAction(ctx, getEntry()); } return null; } }