Search in sources :

Example 56 with Task

use of cz.metacentrum.perun.taskslib.model.Task in project perun by CESNET.

the class TasksManagerBlImpl method getResourcesState.

@Override
public List<ResourceState> getResourcesState(PerunSession session, Vo vo) throws VoNotExistsException {
    perun.getVosManagerBl().checkVoExists(session, vo);
    List<Resource> resources = perun.getResourcesManagerBl().getResources(session, vo);
    List<ResourceState> resourceStateList = new ArrayList<>();
    for (Resource resource : resources) {
        List<Task> taskList = listAllTasksForFacility(session, resource.getFacilityId());
        // create new resourceState
        ResourceState resourceState = new ResourceState();
        resourceState.setResource(resource);
        resourceState.setTaskList(taskList);
        // add new created resourceState to List
        resourceStateList.add(resourceState);
    }
    return resourceStateList;
}
Also used : Task(cz.metacentrum.perun.taskslib.model.Task) Resource(cz.metacentrum.perun.core.api.Resource) RichResource(cz.metacentrum.perun.core.api.RichResource) ArrayList(java.util.ArrayList) ResourceState(cz.metacentrum.perun.controller.model.ResourceState)

Example 57 with Task

use of cz.metacentrum.perun.taskslib.model.Task in project perun by CESNET.

the class TasksManagerBlImpl method getFacilityState.

@Override
public FacilityState getFacilityState(PerunSession session, Facility facility) throws FacilityNotExistsException {
    perun.getFacilitiesManagerBl().checkFacilityExists(session, facility);
    // get all tasks
    List<Task> tasks = getTasksManagerImpl().listAllTasksForFacility(facility.getId());
    // define state
    FacilityState state = new FacilityState();
    state.setFacility(facility);
    // if no tasks we can't determine facility state
    if (tasks == null || tasks.isEmpty()) {
        state.setState(FacilityState.FacilityPropagationState.NOT_DETERMINED);
        return state;
    } else {
        // OK if no change
        state.setState(FacilityState.FacilityPropagationState.OK);
    }
    // fill all available destinations
    List<RichDestination> destinations = perun.getServicesManagerBl().getAllRichDestinations(session, facility);
    for (RichDestination rd : destinations) {
        state.getResults().put(rd.getDestination(), FacilityState.FacilityPropagationState.NOT_DETERMINED);
    }
    // magic with tasks :-)
    for (Task task : tasks) {
        // save previous facility state
        FacilityState.FacilityPropagationState facState = state.getState();
        // PROCESSING and not ERROR before
        if (Arrays.asList(Task.TaskStatus.GENERATED, Task.TaskStatus.GENERATING, Task.TaskStatus.PLANNED, Task.TaskStatus.SENDING).contains(task.getStatus()) && (facState != FacilityState.FacilityPropagationState.ERROR)) {
            state.setState(FacilityState.FacilityPropagationState.PROCESSING);
        } else // ERROR - set ERROR
        if (Arrays.asList(Task.TaskStatus.ERROR, Task.TaskStatus.GENERROR, Task.TaskStatus.SENDERROR).contains(task.getStatus())) {
            state.setState(FacilityState.FacilityPropagationState.ERROR);
        }
        // get destination status
        if (task.getService() != null) {
            List<TaskResult> results = getTasksManagerImpl().getTaskResultsByTask(task.getId());
            Map<Service, Map<Destination, TaskResult>> latestResults = new HashMap<>();
            for (TaskResult res : results) {
                if (latestResults.get(res.getService()) == null) {
                    // put in map since result for service exists
                    Map<Destination, TaskResult> value = new HashMap<>();
                    value.put(res.getDestination(), res);
                    latestResults.put(res.getService(), value);
                } else if (latestResults.get(res.getService()) != null && latestResults.get(res.getService()).get(res.getDestination()) == null) {
                    // put in inner map, since destination for service not yet exists
                    latestResults.get(res.getService()).put(res.getDestination(), res);
                } else {
                    // update in inner map since this is later task result
                    if (latestResults.get(res.getService()).get(res.getDestination()).getId() < res.getId()) {
                        // put in map
                        latestResults.get(res.getService()).put(res.getDestination(), res);
                    }
                }
            }
            for (Map<Destination, TaskResult> res : latestResults.values()) {
                for (TaskResult result : res.values()) {
                    // iterate over all latest tasks results
                    String destination = result.getDestination().getDestination();
                    FacilityState.FacilityPropagationState propState = state.getResults().get(destination);
                    // if any error => state is error
                    if (TaskResult.TaskResultStatus.ERROR.equals(result.getStatus())) {
                        state.getResults().put(destination, FacilityState.FacilityPropagationState.ERROR);
                        continue;
                    }
                    // if result ok and previous was not bad
                    if (TaskResult.TaskResultStatus.DONE.equals(result.getStatus())) {
                        if (FacilityState.FacilityPropagationState.NOT_DETERMINED.equals(propState)) {
                            state.getResults().put(destination, FacilityState.FacilityPropagationState.OK);
                        }
                    }
                }
            }
        }
    }
    return state;
}
Also used : Destination(cz.metacentrum.perun.core.api.Destination) RichDestination(cz.metacentrum.perun.core.api.RichDestination) Task(cz.metacentrum.perun.taskslib.model.Task) HashMap(java.util.HashMap) Service(cz.metacentrum.perun.core.api.Service) FacilityState(cz.metacentrum.perun.controller.model.FacilityState) RichDestination(cz.metacentrum.perun.core.api.RichDestination) TaskResult(cz.metacentrum.perun.taskslib.model.TaskResult) HashMap(java.util.HashMap) Map(java.util.Map)

Example 58 with Task

use of cz.metacentrum.perun.taskslib.model.Task in project perun by CESNET.

the class TaskStoreImpl method getTasksWithStatus.

@Override
public synchronized List<Task> getTasksWithStatus(Task.TaskStatus... status) {
    Collection<Task> tasks = tasksById.values();
    synchronized (this) {
        List<Task> result = new ArrayList<>();
        List<Task.TaskStatus> statuses = Arrays.asList(status);
        for (Task t : tasks) {
            if (statuses.contains(t.getStatus()))
                result.add(t);
        }
        return result;
    }
}
Also used : Task(cz.metacentrum.perun.taskslib.model.Task) ArrayList(java.util.ArrayList)

Example 59 with Task

use of cz.metacentrum.perun.taskslib.model.Task in project perun by CESNET.

the class PropagationMaintainerImpl method abortTask.

private void abortTask(Task task, TaskStatus status) {
    log.warn("[{}] Task {} found in unexpected state, switching to {} ", task.getId(), task, status);
    task.setStatus(status);
    Task removed = null;
    try {
        removed = schedulingPool.removeTask(task);
    // the removal from pool also cancels all task futures, which in turn
    // makes the completion service collect the task and remove it from its executingTasks map
    } catch (TaskStoreException e) {
        log.error("[{}] Failed during removal of Task {} from SchedulingPool: {}", task.getId(), task, e);
    }
    if (removed != null) {
        // some kind of inconsistency and we don't want to spam dispatcher - it will mark it as error on its own
        try {
            jmsQueueManager.reportTaskStatus(task.getId(), task.getStatus(), System.currentTimeMillis());
        } catch (JMSException | InterruptedException e) {
            log.error("[{}] Error trying to reportTaskStatus of {} to Dispatcher: {}", task.getId(), task, e);
        }
    } else {
        log.error("[{}] Stale Task {} was not removed and not reported to dispatcher.", task.getId(), task);
        log.error("  - This is nonsense - why we abort the Task taken from AllTasks but we can remove it from it ??");
    }
}
Also used : Task(cz.metacentrum.perun.taskslib.model.Task) SendTask(cz.metacentrum.perun.taskslib.model.SendTask) JMSException(javax.jms.JMSException) TaskStoreException(cz.metacentrum.perun.taskslib.exceptions.TaskStoreException)

Example 60 with Task

use of cz.metacentrum.perun.taskslib.model.Task in project perun by CESNET.

the class SendWorkerImpl method call.

@Override
public SendTask call() throws TaskExecutionException {
    Task task = sendTask.getTask();
    Service service = task.getService();
    // we never actually run DUMMY destinations !!
    if (sendTask.getDestination().getPropagationType().equals(Destination.PROPAGATIONTYPE_DUMMY)) {
        log.info("[{}] Executing SEND worker skipped for dummy Destination: {}. Marked as SENT.", sendTask.getTask().getId(), sendTask.getDestination().getDestination());
        // set results
        sendTask.setStatus(SENT);
        sendTask.setStdout("");
        sendTask.setStderr("");
        sendTask.setReturnCode(0);
        sendTask.setEndTime(new Date(System.currentTimeMillis()));
        return sendTask;
    }
    log.info("[{}] Executing SEND worker for Task with Service ID: {} and Facility ID: {} and Destination: {}", sendTask.getTask().getId(), sendTask.getTask().getServiceId(), sendTask.getTask().getFacilityId(), sendTask.getDestination().getDestination());
    ProcessBuilder pb = new ProcessBuilder(service.getScript(), task.getFacility().getName(), sendTask.getDestination().getDestination(), sendTask.getDestination().getType());
    try {
        // start the script and wait for results
        super.execute(pb);
        // set results
        sendTask.setStdout(super.getStdout());
        sendTask.setStderr(super.getStderr());
        sendTask.setReturnCode(super.getReturnCode());
        sendTask.setEndTime(new Date(System.currentTimeMillis()));
        if (getReturnCode() != 0) {
            log.error("[{}] SEND worker failed for Task. Ret code {}, STDOUT: {}, STDERR: {}", task.getId(), getReturnCode(), getStdout(), getStderr());
            sendTask.setStatus(ERROR);
            // XXX: why exception? There is nothing exceptional about the situation.
            throw new TaskExecutionException(task, sendTask.getDestination(), getReturnCode(), getStdout(), getStderr());
        } else {
            if (getStderr().isEmpty()) {
                sendTask.setStatus(SENT);
            } else {
                sendTask.setStatus(WARNING);
            }
            log.info("[{}] SEND worker finished for Task with status {}. Ret code {}, STDOUT: {}, STDERR: {}", sendTask.getTask().getId(), sendTask.getStatus(), getReturnCode(), getStdout(), getStderr());
            return sendTask;
        }
    } catch (IOException e) {
        log.error("[{}] SEND worker failed for Task. IOException: {}.", task.getId(), e);
        sendTask.setStatus(ERROR);
        sendTask.setEndTime(new Date(System.currentTimeMillis()));
        throw new TaskExecutionException(task, sendTask.getDestination(), 2, "", e.getMessage());
    } catch (InterruptedException e) {
        log.warn("[{}] SEND worker failed for Task. Execution was interrupted {}.", task.getId(), e);
        sendTask.setStatus(ERROR);
        sendTask.setEndTime(new Date(System.currentTimeMillis()));
        throw new TaskExecutionException(task, sendTask.getDestination(), 1, "", e.getMessage());
    }
}
Also used : TaskExecutionException(cz.metacentrum.perun.engine.exceptions.TaskExecutionException) Task(cz.metacentrum.perun.taskslib.model.Task) SendTask(cz.metacentrum.perun.taskslib.model.SendTask) Service(cz.metacentrum.perun.core.api.Service) IOException(java.io.IOException) Date(java.util.Date)

Aggregations

Task (cz.metacentrum.perun.taskslib.model.Task)77 InternalErrorException (cz.metacentrum.perun.core.api.exceptions.InternalErrorException)16 Date (java.util.Date)16 Test (org.junit.Test)15 Facility (cz.metacentrum.perun.core.api.Facility)14 Destination (cz.metacentrum.perun.core.api.Destination)11 Service (cz.metacentrum.perun.core.api.Service)10 TaskStoreException (cz.metacentrum.perun.taskslib.exceptions.TaskStoreException)10 PrivilegeException (cz.metacentrum.perun.core.api.exceptions.PrivilegeException)9 ExecService (cz.metacentrum.perun.taskslib.model.ExecService)9 ArrayList (java.util.ArrayList)9 AbstractDispatcherTest (cz.metacentrum.perun.dispatcher.AbstractDispatcherTest)6 SendTask (cz.metacentrum.perun.taskslib.model.SendTask)6 TaskResult (cz.metacentrum.perun.taskslib.model.TaskResult)6 JMSException (javax.jms.JMSException)6 Pair (cz.metacentrum.perun.core.api.Pair)5 AbstractEngineTest (cz.metacentrum.perun.engine.AbstractEngineTest)5 TaskExecutionException (cz.metacentrum.perun.engine.exceptions.TaskExecutionException)5 LocalDateTime (java.time.LocalDateTime)5 Resource (cz.metacentrum.perun.core.api.Resource)4