use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.
the class TestTaskNotStarted method createJob1.
/*
* Job with one task, task's selection script always returns 'false' so task can't start
*/
private TaskFlowJob createJob1() throws Exception {
TaskFlowJob job = new TaskFlowJob();
job.setName(this.getClass().getSimpleName() + "_1");
JavaTask javaTask = new JavaTask();
javaTask.setExecutableClassName(EmptyTask.class.getName());
javaTask.setName("task1");
SelectionScript selScript = new SelectionScript("selected = false;", "js");
javaTask.setSelectionScript(selScript);
job.addTask(javaTask);
return job;
}
use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.
the class TestJobServerLogs method test.
@Test
public void test() throws Exception {
JobId simpleJobId = schedulerHelper.submitJob(new File(simpleJobDescriptor.toURI()).getAbsolutePath());
String taskName = "task1";
TaskInfo ti = schedulerHelper.waitForEventTaskRunning(simpleJobId, taskName);
String taskLogs = schedulerHelper.getSchedulerInterface().getTaskServerLogs(simpleJobId.toString(), taskName);
if (!taskLogs.contains("task " + ti.getTaskId() + " (" + ti.getTaskId().getReadableName() + ")" + " started")) {
log("Incorrect task server logs:");
log(taskLogs);
fail("Task " + ti.getTaskId() + " was not scheduled");
}
schedulerHelper.waitForEventJobFinished(simpleJobId);
String jobLogs = schedulerHelper.getSchedulerInterface().getJobServerLogs(simpleJobId.toString());
for (int i = 0; i < TASKS_IN_SIMPLE_JOB; i++) {
TaskId taskId = TaskIdImpl.createTaskId(simpleJobId, "task" + (i + 1), i);
String taskIdString = taskId.toString();
String taskIdStringQuoted = Pattern.quote(taskIdString);
if (!matchLine(jobLogs, "task " + taskIdStringQuoted + " \\(task[12]\\) started")) {
log("Incorrect job server logs");
log(jobLogs);
fail("Task " + taskIdString + " was not scheduled");
}
if (!matchLine(jobLogs, "task " + taskIdStringQuoted + " \\(task[12]\\) finished")) {
log("Incorrect job server logs");
log(jobLogs);
fail("Task " + taskIdString + " was not finished");
}
}
checkRemoval(simpleJobId);
JobId pendingJobId = schedulerHelper.submitJob(createPendingJob());
Thread.sleep(5000);
jobLogs = schedulerHelper.getSchedulerInterface().getJobServerLogs(pendingJobId.toString());
if (!jobLogs.contains("will get 0 nodes")) {
log("Incorrect job server logs");
log(jobLogs);
fail("RM output is not correct");
}
if (!jobLogs.contains(SCRIPT_OUTPUT)) {
log("Incorrect job server logs");
log(jobLogs);
fail("No script output");
}
checkRemoval(pendingJobId);
}
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) 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);
expectedTaskOutput.add(postOutput);
Task task;
if (createJavaTask) {
JavaTask javaTask = new JavaTask();
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;
}
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);
}
JobId jobId = schedulerHelper.testJobSubmission(job);
Scheduler scheduler = schedulerHelper.getSchedulerInterface();
String userURI = scheduler.getUserSpaceURIs().get(0);
String userPath = new File(new URI(userURI)).getAbsolutePath();
JobResult jobResult = scheduler.getJobResult(jobId);
Map<String, TaskResult> results = jobResult.getAllResults();
for (String taskName : expectedOutput.keySet()) {
File taskLog = new File(userPath + "/" + jobId.value(), String.format("TaskLogs-%s-%s.log", jobId.value(), results.get(taskName).getTaskId().value()));
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));
}
}
}
use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.
the class ProbabilisticSelectionManagerTest method testIncreasingProbabilityDynamic.
@Test
public void testIncreasingProbabilityDynamic() throws Exception {
int nbNodes = 10;
SelectionScript script = new SelectionScript("test", "groovy", true);
ManagerObjects managerObjects = new ManagerObjects(nbNodes).invoke();
SelectionManager selectionManager = managerObjects.getSelectionManager();
ArrayList<RMNode> freeNodes = managerObjects.getFreeNodes();
for (int i = 0; i < nbNodes; i++) {
// we increase the probability for each node, lowest node has the min number of true results
for (int j = 0; j < i + 1; j++) {
selectionManager.processScriptResult(script, Collections.EMPTY_MAP, new ScriptResult<>(true), freeNodes.get(i));
}
}
List<RMNode> arrangedNodes = selectionManager.arrangeNodesForScriptExecution(freeNodes, Collections.singletonList(script), Collections.EMPTY_MAP);
// nodes are expected to be sorted in reverse order
for (int i = 0; i < nbNodes; i++) {
Assert.assertEquals("mocked-node-" + (nbNodes - i), arrangedNodes.get(i).getNodeName());
Assert.assertFalse(selectionManager.isPassed(script, Collections.EMPTY_MAP, arrangedNodes.get(i)));
}
}
use of org.ow2.proactive.scripting.Script in project scheduling by ow2-proactive.
the class ProbabilisticSelectionManagerTest method testDecreasingProbabilityErrorsDynamicScriptWithoutDynamicityStorage.
@Test
public void testDecreasingProbabilityErrorsDynamicScriptWithoutDynamicityStorage() throws Exception {
int nbNodes = 10;
PAResourceManagerProperties.RM_SELECT_SCRIPT_NODE_DYNAMICITY.updateProperty("0");
try {
SelectionScript script = new SelectionScript("test", "groovy", true);
ManagerObjects managerObjects = new ManagerObjects(nbNodes).invoke();
SelectionManager selectionManager = managerObjects.getSelectionManager();
ArrayList<RMNode> freeNodes = managerObjects.getFreeNodes();
for (int i = 0; i < nbNodes; i++) {
// we decrease the probability for each node, lowest node has the max number of script exceptions
for (int j = i; j < nbNodes; j++) {
selectionManager.processScriptResult(script, Collections.EMPTY_MAP, new ScriptResult<Boolean>(new IllegalArgumentException("amistake")), freeNodes.get(i));
}
}
List<RMNode> arrangedNodes = selectionManager.arrangeNodesForScriptExecution(freeNodes, Collections.singletonList(script), Collections.EMPTY_MAP);
// list is supposed to contain all nodes because of dynamicity == 0
Assert.assertEquals(freeNodes.size(), arrangedNodes.size());
// nodes are expected to be sorted in reverse order
for (int i = 0; i < nbNodes; i++) {
Assert.assertEquals("mocked-node-" + (nbNodes - i), arrangedNodes.get(i).getNodeName());
Assert.assertFalse(selectionManager.isPassed(script, Collections.EMPTY_MAP, arrangedNodes.get(i)));
}
} finally {
PAResourceManagerProperties.RM_SELECT_SCRIPT_NODE_DYNAMICITY.updateProperty("300000");
}
}
Aggregations