Search in sources :

Example 1 with TaskCouldNotStartException

use of org.ow2.proactive.scheduler.common.exception.TaskCouldNotStartException in project scheduling by ow2-proactive.

the class SchedulerFrontend method getTaskResultFromIncarnation.

/**
 * {@inheritDoc}
 */
@Override
@ImmediateService
public TaskResult getTaskResultFromIncarnation(JobId jobId, String taskName, int inc) throws NotConnectedException, UnknownJobException, UnknownTaskException, PermissionException {
    // checking permissions
    frontendState.checkPermissions("getTaskResultFromIncarnation", frontendState.getIdentifiedJob(jobId), YOU_DO_NOT_HAVE_PERMISSION_TO_GET_THE_TASK_RESULT_OF_THIS_JOB);
    if (inc < 0) {
        throw new IllegalArgumentException("Incarnation must be 0 or greater.");
    }
    logger.debug("Job " + jobId + ", trying to get the task result, incarnation " + inc);
    try {
        TaskResult result = dbManager.loadTaskResult(jobId, taskName, inc);
        // handling special statuses
        TaskState ts = frontendState.getTaskState(jobId, taskName);
        switch(ts.getStatus()) {
            case NOT_STARTED:
                if (result == null) {
                    return new TaskResultImpl(frontendState.getTaskId(jobId, taskName), new TaskCouldNotStartException(), new SimpleTaskLogs("", "The task could not start due to dependency failure"), 0);
                } else {
                    Throwable newException = new TaskCouldNotStartException("The task could not start due to dependency failure", result.getException());
                    ((TaskResultImpl) result).setException(newException);
                }
                break;
            case NOT_RESTARTED:
                if (result == null) {
                    return new TaskResultImpl(frontendState.getTaskId(jobId, taskName), new TaskCouldNotRestartException(), new SimpleTaskLogs("", "The task could not be restarted after an error during the previous execution"), 0);
                } else {
                    Throwable newException = new TaskCouldNotRestartException("The task could not be restarted after an error during the previous execution", result.getException());
                    ((TaskResultImpl) result).setException(newException);
                }
                break;
            case SKIPPED:
                // result should always be null
                return new TaskResultImpl(frontendState.getTaskId(jobId, taskName), new TaskSkippedException(), new SimpleTaskLogs("", "The task was skipped in the workflow"), 0);
            default:
                if (result == null) {
                    // otherwise the task is not finished
                    logger.info("Task " + taskName + " of job " + jobId + " is not finished");
                }
                break;
        }
        return result;
    } catch (DatabaseManagerException e) {
        throw new UnknownTaskException("Unknown task " + taskName + ", job: " + jobId);
    }
}
Also used : SimpleTaskLogs(org.ow2.proactive.scheduler.common.task.SimpleTaskLogs) UnknownTaskException(org.ow2.proactive.scheduler.common.exception.UnknownTaskException) TaskCouldNotStartException(org.ow2.proactive.scheduler.common.exception.TaskCouldNotStartException) TaskCouldNotRestartException(org.ow2.proactive.scheduler.common.exception.TaskCouldNotRestartException) TaskResultImpl(org.ow2.proactive.scheduler.task.TaskResultImpl) TaskSkippedException(org.ow2.proactive.scheduler.common.exception.TaskSkippedException) TaskResult(org.ow2.proactive.scheduler.common.task.TaskResult) TaskState(org.ow2.proactive.scheduler.common.task.TaskState) DatabaseManagerException(org.ow2.proactive.db.DatabaseManagerException) ImmediateService(org.objectweb.proactive.annotation.ImmediateService)

Example 2 with TaskCouldNotStartException

use of org.ow2.proactive.scheduler.common.exception.TaskCouldNotStartException in project scheduling by ow2-proactive.

the class TestTaskNotExecuted method testTaskNotExecuted.

private void testTaskNotExecuted(String jobDescriptorPath1, String jobDescriptorPath2, String jobDescriptorPath3) throws Exception {
    log("Submitting job 1");
    JobId id1 = schedulerHelper.submitJob(jobDescriptorPath1);
    log("Wait for event job 1 submitted");
    schedulerHelper.waitForEventJobSubmitted(id1);
    log("Wait for event t1 running");
    schedulerHelper.waitForEventTaskRunning(id1, "t0");
    schedulerHelper.waitForEventTaskFinished(id1, "t0");
    schedulerHelper.waitForEventJobFinished(id1);
    TaskResult tr1 = schedulerHelper.getSchedulerInterface().getTaskResult(id1, "t1");
    assertTrue(tr1.getException() instanceof TaskCouldNotStartException);
    log("Submitting job 2");
    JobId id2 = schedulerHelper.submitJob(jobDescriptorPath2);
    log("Wait for event job 2 submitted");
    schedulerHelper.waitForEventJobSubmitted(id2);
    log("Wait for event t2 running");
    schedulerHelper.waitForEventTaskRunning(id2, "t2");
    log("Restarting task");
    schedulerHelper.getSchedulerInterface().restartTask(id2, "t2", Integer.MAX_VALUE);
    TaskInfo ti2 = schedulerHelper.waitForEventTaskWaitingForRestart(id2, "t2");
    schedulerHelper.getSchedulerInterface().killJob(id2);
    schedulerHelper.waitForEventJobFinished(id2);
    JobState jobState = schedulerHelper.getSchedulerInterface().getJobState(id2);
    Assert.assertEquals(TaskStatus.NOT_RESTARTED, jobState.getTasks().get(0).getStatus());
    TaskResult tr2 = schedulerHelper.getSchedulerInterface().getTaskResult(id2, "t2");
    assertTrue(tr2.getException() instanceof TaskCouldNotRestartException);
    log("Submitting job 3");
    JobId id3 = schedulerHelper.submitJob(jobDescriptorPath3);
    log("Wait for event job 3 submitted");
    schedulerHelper.waitForEventJobSubmitted(id3);
    log("Wait for event T T1 T2 finished");
    schedulerHelper.waitForEventTaskFinished(id3, "T");
    schedulerHelper.waitForEventTaskFinished(id3, "T1");
    TaskResult tr3_1 = schedulerHelper.getSchedulerInterface().getTaskResult(id3, "T1");
    TaskResult tr3_2 = schedulerHelper.getSchedulerInterface().getTaskResult(id3, "T2");
    assertNull(tr3_1.getException());
    assertTrue(tr3_2.getException() instanceof TaskSkippedException);
}
Also used : TaskInfo(org.ow2.proactive.scheduler.common.task.TaskInfo) TaskCouldNotStartException(org.ow2.proactive.scheduler.common.exception.TaskCouldNotStartException) TaskCouldNotRestartException(org.ow2.proactive.scheduler.common.exception.TaskCouldNotRestartException) TaskSkippedException(org.ow2.proactive.scheduler.common.exception.TaskSkippedException) TaskResult(org.ow2.proactive.scheduler.common.task.TaskResult) JobState(org.ow2.proactive.scheduler.common.job.JobState) JobId(org.ow2.proactive.scheduler.common.job.JobId)

Aggregations

TaskCouldNotRestartException (org.ow2.proactive.scheduler.common.exception.TaskCouldNotRestartException)2 TaskCouldNotStartException (org.ow2.proactive.scheduler.common.exception.TaskCouldNotStartException)2 TaskSkippedException (org.ow2.proactive.scheduler.common.exception.TaskSkippedException)2 TaskResult (org.ow2.proactive.scheduler.common.task.TaskResult)2 ImmediateService (org.objectweb.proactive.annotation.ImmediateService)1 DatabaseManagerException (org.ow2.proactive.db.DatabaseManagerException)1 UnknownTaskException (org.ow2.proactive.scheduler.common.exception.UnknownTaskException)1 JobId (org.ow2.proactive.scheduler.common.job.JobId)1 JobState (org.ow2.proactive.scheduler.common.job.JobState)1 SimpleTaskLogs (org.ow2.proactive.scheduler.common.task.SimpleTaskLogs)1 TaskInfo (org.ow2.proactive.scheduler.common.task.TaskInfo)1 TaskState (org.ow2.proactive.scheduler.common.task.TaskState)1 TaskResultImpl (org.ow2.proactive.scheduler.task.TaskResultImpl)1