Search in sources :

Example 41 with Script

use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.

the class TagTest method execute.

private void execute(InternalTask task) {
    task.setExecuterInformation(executerInformationMock);
    job.startTask(task);
    FlowScript script = task.getFlowScript();
    FlowAction action = null;
    if (script != null) {
        action = task.getFlowScript().execute().getResult();
    }
    job.terminateTask(false, task.getId(), schedulerStateUpdateMock, action, resultMock);
    System.out.println("executed " + task.getName() + " -> " + getTaskNameList(true));
}
Also used : FlowAction(org.ow2.proactive.scheduler.common.task.flow.FlowAction) FlowScript(org.ow2.proactive.scheduler.common.task.flow.FlowScript)

Example 42 with Script

use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.

the class TestPreciousLogs method testPreciousLogs.

private void testPreciousLogs(boolean createJavaTask, boolean forkEnv, boolean generateError) throws Exception {
    TaskFlowJob job = new TaskFlowJob();
    job.setName(this.getClass().getSimpleName());
    Map<String, List<String>> expectedOutput = new LinkedHashMap<>();
    for (int i = 0; i < 3; i++) {
        String forkOutput = "forkOutput-" + i;
        String preOutput = "preOutput-" + i;
        String postOutput = "postOutput-" + i;
        List<String> expectedTaskOutput = new ArrayList<>();
        expectedTaskOutput.add(TASK_OUTPUT);
        expectedTaskOutput.add(preOutput);
        if (!generateError) {
            expectedTaskOutput.add(postOutput);
        }
        Task task;
        if (createJavaTask) {
            JavaTask javaTask = new JavaTask();
            if (generateError) {
                javaTask.setExecutableClassName(TestJavaTaskWithError.class.getName());
            } else {
                javaTask.setExecutableClassName(TestJavaTask.class.getName());
            }
            if (forkEnv) {
                ForkEnvironment env = new ForkEnvironment();
                env.setEnvScript(createScript(forkOutput));
                javaTask.setForkEnvironment(env);
                expectedTaskOutput.add(forkOutput);
            }
            task = javaTask;
        } else {
            NativeTask nativeTask = new NativeTask();
            File script = new File(getClass().getResource("/functionaltests/executables/test_echo_task.sh").getFile());
            if (!script.exists()) {
                Assert.fail("Can't find script " + script.getAbsolutePath());
            }
            nativeTask.setCommandLine(script.getAbsolutePath());
            task = nativeTask;
        }
        if (generateError) {
            task.setMaxNumberOfExecution(NB_EXECUTIONS);
        } else {
            task.setMaxNumberOfExecution(1);
            task.setOnTaskError(OnTaskError.CANCEL_JOB);
        }
        task.setPreciousLogs(true);
        task.setName("Task-" + i);
        task.setPreScript(createScript(preOutput));
        task.setPostScript(createScript(postOutput));
        expectedOutput.put(task.getName(), expectedTaskOutput);
        job.addTask(task);
    }
    Scheduler scheduler = schedulerHelper.getSchedulerInterface();
    String userURI = scheduler.getUserSpaceURIs().get(0);
    File userFile = new File(new URI(userURI));
    // Clean all log files in user space
    for (File logFile : FileUtils.listFiles(userFile, new String[] { "log" }, true)) {
        FileUtils.deleteQuietly(logFile);
    }
    JobId jobId = schedulerHelper.testJobSubmission(job, true, false);
    JobResult jobResult = scheduler.getJobResult(jobId);
    Map<String, TaskResult> results = jobResult.getAllResults();
    List<File> logFiles = new ArrayList<>();
    for (String taskName : expectedOutput.keySet()) {
        File taskLog = new File(userFile.toString() + "/" + jobId.value(), String.format("TaskLogs-%s-%s.log", jobId.value(), results.get(taskName).getTaskId().value()));
        logFiles.add(taskLog);
        if (!taskLog.exists()) {
            Assert.fail("Task log file " + taskLog.getAbsolutePath() + " doesn't exist");
        }
        String output = new String(FileToBytesConverter.convertFileToByteArray(taskLog));
        System.out.println("Log file for " + taskName + ":");
        System.out.println(output);
        for (String expectedLine : expectedOutput.get(taskName)) {
            Assert.assertTrue("Output doesn't contain line " + expectedLine, output.contains(expectedLine));
            int expectedOccurrences = (generateError ? NB_EXECUTIONS : 1);
            Assert.assertEquals("Output doesn't contain " + expectedOccurrences + " occurrences of line " + expectedLine, expectedOccurrences, StringUtils.countMatches(output, expectedLine));
        }
    }
    // Test log removal
    schedulerHelper.removeJob(jobId);
    waitUntilAllLogsWereRemoved(jobId, logFiles);
}
Also used : JobResult(org.ow2.proactive.scheduler.common.job.JobResult) Scheduler(org.ow2.proactive.scheduler.common.Scheduler) TaskFlowJob(org.ow2.proactive.scheduler.common.job.TaskFlowJob) ArrayList(java.util.ArrayList) URI(java.net.URI) LinkedHashMap(java.util.LinkedHashMap) ArrayList(java.util.ArrayList) List(java.util.List) File(java.io.File) JobId(org.ow2.proactive.scheduler.common.job.JobId)

Example 43 with Script

use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.

the class TestExecuteScriptsOnBusyNode method testRunningTaskDoesNotImpactScriptExecution.

public void testRunningTaskDoesNotImpactScriptExecution(boolean withSelectionScript) throws Exception {
    FileLock fileLock = new FileLock();
    Path fileLockPath = fileLock.lock();
    String scriptCode = "org.ow2.proactive.scheduler.util.FileLock.waitUntilUnlocked(\"" + fileLockPath.toString().replace("\\", "\\\\") + "\")";
    log("Submit script (handled asynchronously by the resource manager)");
    List<ScriptResult<Object>> resultsFuture = schedulerHelper.getResourceManager().executeScript(scriptCode, "groovy", TargetType.NODE_URL.name(), Sets.newSet(testNode.getNodeURL()));
    log("Submit job");
    final JobId jobId = schedulerHelper.submitJob(createNonBlockingJob(withSelectionScript));
    // We wait a bit to be sure the job went through the scheduling loop
    // if a selection script is set, the task start will be delayed as much as the SelectionManager is busy executing this script
    // (and thus cannot execute the selection script provided by the task)
    Thread.sleep(3000);
    // unlock the script.
    log("Unlock the script");
    fileLock.unlock();
    log("Wait when job finish");
    schedulerHelper.waitForEventJobFinished(jobId, TIMEOUT);
    Assert.assertEquals(1, resultsFuture.size());
    ScriptResult result = resultsFuture.get(0);
    if (result.errorOccured()) {
        result.getException().printStackTrace();
        Assert.fail("Script execution failed");
    }
    schedulerHelper.waitUntilState(testNode.getNodeURL(), NodeState.FREE, TIMEOUT);
    log("Check job result");
    checkJobResult(schedulerHelper.getSchedulerInterface(), jobId);
    checkActiveObjects();
}
Also used : Path(java.nio.file.Path) ScriptResult(org.ow2.proactive.scripting.ScriptResult) FileLock(org.ow2.proactive.scheduler.util.FileLock) JobId(org.ow2.proactive.scheduler.common.job.JobId)

Example 44 with Script

use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.

the class TestExecuteScriptsOnBusyNode method createNonBlockingJob.

private TaskFlowJob createNonBlockingJob(boolean withSelectionScript) throws Exception {
    TaskFlowJob job = new TaskFlowJob();
    job.setName(this.getClass().getSimpleName() + "_SimpleJob");
    job.setOnTaskError(OnTaskError.CANCEL_JOB);
    job.setMaxNumberOfExecution(1);
    JavaTask javaTask = new JavaTask();
    javaTask.setExecutableClassName(TestJavaTask.class.getName());
    javaTask.setMaxNumberOfExecution(1);
    javaTask.setOnTaskError(OnTaskError.CANCEL_JOB);
    javaTask.setName("Test task");
    if (withSelectionScript) {
        // we want to trigger a selection script execution on the unique node, as this will call node.clean()
        javaTask.addSelectionScript(new SelectionScript("selected = true", "groovy", true));
    }
    job.addTask(javaTask);
    return job;
}
Also used : SelectionScript(org.ow2.proactive.scripting.SelectionScript) TaskFlowJob(org.ow2.proactive.scheduler.common.job.TaskFlowJob) JavaTask(org.ow2.proactive.scheduler.common.task.JavaTask)

Example 45 with Script

use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.

the class TestJobSchedulerHome method pahomeScriptTask.

public void pahomeScriptTask() throws Throwable {
    log("Test ProActive Home Script Task...");
    String tname = "pahomeScriptTask";
    TaskFlowJob job = new TaskFlowJob();
    job.setName(this.getClass().getSimpleName() + "_" + tname);
    ScriptTask task1 = new ScriptTask();
    task1.setName(tname);
    Script pahomeScript = new SimpleScript(TestJobSchedulerHome.class.getResource("/functionaltests/scripts/schedulerHome.js"), new String[] { schedulerHomePath });
    ;
    TaskScript ts = new TaskScript(pahomeScript);
    task1.setScript(ts);
    job.addTask(task1);
    submitAndCheckJob(job, tname, false);
}
Also used : SimpleScript(org.ow2.proactive.scripting.SimpleScript) TaskScript(org.ow2.proactive.scripting.TaskScript) Script(org.ow2.proactive.scripting.Script) TaskScript(org.ow2.proactive.scripting.TaskScript) SimpleScript(org.ow2.proactive.scripting.SimpleScript)

Aggregations

Test (org.junit.Test)46 SelectionScript (org.ow2.proactive.scripting.SelectionScript)40 File (java.io.File)38 SimpleScript (org.ow2.proactive.scripting.SimpleScript)33 TaskFlowJob (org.ow2.proactive.scheduler.common.job.TaskFlowJob)27 ScriptResult (org.ow2.proactive.scripting.ScriptResult)21 IOException (java.io.IOException)18 HashMap (java.util.HashMap)18 JavaTask (org.ow2.proactive.scheduler.common.task.JavaTask)16 Script (org.ow2.proactive.scripting.Script)16 JobId (org.ow2.proactive.scheduler.common.job.JobId)13 FlowScript (org.ow2.proactive.scheduler.common.task.flow.FlowScript)13 ArrayList (java.util.ArrayList)12 RMNode (org.ow2.proactive.resourcemanager.rmnode.RMNode)12 Serializable (java.io.Serializable)11 TaskScript (org.ow2.proactive.scripting.TaskScript)11 NodeSet (org.ow2.proactive.utils.NodeSet)11 RMFunctionalTest (functionaltests.utils.RMFunctionalTest)10 ResourceManager (org.ow2.proactive.resourcemanager.frontend.ResourceManager)10 ForkEnvironment (org.ow2.proactive.scheduler.common.task.ForkEnvironment)9