package com.breakersoft.plow.dispatcher;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import com.breakersoft.plow.ExitStatus;
import com.breakersoft.plow.Signal;
import com.breakersoft.plow.dispatcher.domain.DispatchProc;
import com.breakersoft.plow.dispatcher.domain.DispatchResult;
import com.breakersoft.plow.dispatcher.domain.DispatchTask;
import com.breakersoft.plow.thrift.TaskState;
public class AbstractDispatcher {
private static final Logger logger =
org.slf4j.LoggerFactory.getLogger(AbstractDispatcher.class);
@Autowired
protected DispatchService dispatchService;
protected void dispatchFailed(DispatchResult result, DispatchProc proc, DispatchTask task, String message) {
logger.error("Unable to dispatch {}/{}, {}", new Object[] {proc, task, message});
if (task != null) {
if (task.started) {
dispatchService.stopTask(task, TaskState.WAITING, ExitStatus.FAIL, Signal.ABORTED_TASK);
}
else {
dispatchService.unreserveTask(task);
}
}
if (proc != null) {
dispatchService.unassignAndMarkForDeallocation(proc);
}
if (result != null) {
result.continueDispatch = false;
}
}
}