use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class SelectionTest method action.
@Test
public void action() throws Exception {
String currentHost = System.getenv("HOSTNAME");
// checking if properties distantHost and neighborHost are defined
String distantHost = System.getProperty("distantHost");
String neighborHost = System.getProperty("neighborHost");
if (distantHost != null && !distantHost.equals("${distantHost}") && neighborHost != null && !neighborHost.equals("${neighborHost}")) {
String rmHome = System.getProperty("pa.rm.home");
String rmCredPath = rmHome + "/config/authentication/rm.cred";
String javaExec = System.getenv("JAVA_HOME") + "/bin/java";
// properties are defined, trying to deploy nodes to these hosts
BooleanWrapper result = rmHelper.getResourceManager().createNodeSource("remote", SSHInfrastructure.class.getName(), new Object[] { // ssh options
"", // java executable path
javaExec, // rmHelper distrib path
rmHome, // node lookup timeout
"30000", // attempts
"2", // os
"Linux", // java options
"", // rmHelper credential
FileToBytesConverter.convertFileToByteArray(new File(rmCredPath)), (distantHost + " 2\n" + neighborHost).getBytes() }, StaticPolicy.class.getName(), null, NODES_NOT_RECOVERABLE);
if (result.getBooleanValue()) {
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
// wait for the nodes to be in free state
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
}
// we are good - all remote nodes registered
} else {
// no parameters provided
RMTHelper.log("Nothing to do. Set up distantHost & neighborHost parameters.");
return;
}
// creating the selection script object
SelectionScript script = new SelectionScript(new File(vmPropSelectionScriptpath), new String[] { this.vmPropKey1, this.vmPropValue1 }, true);
List<SelectionScript> scriptList = new LinkedList<>();
scriptList.add(script);
ResourceManager resourceManager = rmHelper.getResourceManager();
String node1 = "node1";
// a node with the VM properties
HashMap<String, String> vmProperties = new HashMap<>();
vmProperties.put(this.vmPropKey1, this.vmPropValue1);
testNode = rmHelper.createNode(node1, vmProperties);
String node1URL = testNode.getNode().getNodeInformation().getURL();
resourceManager.addNode(node1URL, NodeSource.DEFAULT);
// wait node adding event
rmHelper.waitForNodeEvent(RMEventType.NODE_ADDED, node1URL);
// wait for the nodes to be in free state
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// so now we have 9 node in total
// 6 local nodes (5 default, 1 marked with property)
// 2 nodes on distant host
// 1 node on neighbor host
Assert.assertEquals(9, resourceManager.getState().getFreeNodesNumber());
// checking TopologyDescriptor.ARBITRARY
NodeSet ns = resourceManager.getAtMostNodes(1, TopologyDescriptor.ARBITRARY, null, null);
Assert.assertEquals(1, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(8, TopologyDescriptor.ARBITRARY, null, null);
Assert.assertEquals(8, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, TopologyDescriptor.ARBITRARY, null, null);
Assert.assertEquals(9, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, TopologyDescriptor.ARBITRARY, scriptList, null);
Assert.assertEquals(1, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
// checking TopologyDescriptor.BEST_PROXIMITY
ns = resourceManager.getAtMostNodes(1, TopologyDescriptor.BEST_PROXIMITY, null, null);
Assert.assertEquals(1, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(9, TopologyDescriptor.BEST_PROXIMITY, null, null);
Assert.assertEquals(9, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, TopologyDescriptor.BEST_PROXIMITY, null, null);
Assert.assertEquals(9, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
// Node pivotNode = null;
ns = resourceManager.getAtMostNodes(6, TopologyDescriptor.BEST_PROXIMITY, null, null);
Assert.assertEquals(6, ns.size());
for (Node node : ns) {
// pivotNode = node;
if (!node.getNodeInformation().getURL().contains(currentHost)) {
Assert.assertTrue("All nodes have to be from " + currentHost, false);
}
}
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(7, TopologyDescriptor.BEST_PROXIMITY, null, null);
Assert.assertEquals(7, ns.size());
for (Node node : ns) {
if (node.getNodeInformation().getURL().contains(distantHost)) {
Assert.assertTrue("Node from distant host selected", false);
}
}
resourceManager.releaseNodes(ns).getBooleanValue();
// pivot scenario
// List<Node> pivot = new LinkedList<Node>();
// pivot.add(pivotNode);
// ns = resourceManager.getAtMostNodes(6,
// new BestProximityDescriptor(BestProximityDescriptor.MAX, pivot), null, null);
// Assert.assertEquals(6, ns.size());
// for (Node node : ns) {
// if (node.getNodeInformation().getURL().equals(pivotNode.getNodeInformation().getURL())) {
// Assert.assertTrue("Pivot must not be in results", false);
// }
// if (node.getNodeInformation().getURL().contains(distantHost)) {
// Assert.assertTrue("Node from distant host selected", false);
// }
// }
// resourceManager.releaseNodes(ns).getBooleanValue();
//
// ns = resourceManager.getAtMostNodes(7,
// new BestProximityDescriptor(BestProximityDescriptor.MAX, pivot), null, null);
// Assert.assertEquals(7, ns.size());
// for (Node node : ns) {
// if (node.getNodeInformation().getURL().equals(pivotNode.getNodeInformation().getURL())) {
// Assert.assertTrue("Pivot must not be in results", false);
// }
// }
// resourceManager.releaseNodes(ns).getBooleanValue();
// checking TopologyDescriptor.ThresholdProximityDescriptor
ns = resourceManager.getAtMostNodes(1, new ThresholdProximityDescriptor(Long.MAX_VALUE), null, null);
Assert.assertEquals(1, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(9, new ThresholdProximityDescriptor(Long.MAX_VALUE), null, null);
Assert.assertEquals(9, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, new ThresholdProximityDescriptor(Long.MAX_VALUE), null, null);
Assert.assertEquals(9, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
// getting information about topology
Topology topology = resourceManager.getTopology();
Assert.assertEquals(3, topology.getHosts().size());
// looking for distances consistency
Long current2neighborDistance = topology.getDistance(currentHost, neighborHost);
Long current2distantDistance = topology.getDistance(currentHost, distantHost);
Long distant2neightborDistance = topology.getDistance(neighborHost, distantHost);
if (current2neighborDistance == null || current2distantDistance == null) {
Assert.assertTrue("Please put full host names to the parameters", false);
}
if (current2neighborDistance > current2distantDistance) {
Assert.assertTrue("Distant host is close to current than neighbor according to the topology", false);
}
System.out.println("Distance between " + currentHost + " and " + neighborHost + " is " + current2neighborDistance);
System.out.println("Distance between " + currentHost + " and " + distantHost + " is " + current2distantDistance);
System.out.println("Distance between " + neighborHost + " and " + distantHost + " is " + distant2neightborDistance);
long maxThreshold = Math.max(current2neighborDistance, Math.max(current2distantDistance, distant2neightborDistance));
ns = resourceManager.getAtMostNodes(100, new ThresholdProximityDescriptor(current2neighborDistance - 1), null, null);
Assert.assertEquals(6, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, new ThresholdProximityDescriptor(current2neighborDistance), null, null);
Assert.assertEquals(7, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, new ThresholdProximityDescriptor(maxThreshold - 1), null, null);
for (Node node : ns) {
if (node.getNodeInformation().getURL().contains(distantHost)) {
Assert.assertTrue("Node from distant host selected", false);
}
}
Assert.assertEquals(7, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(10, new ThresholdProximityDescriptor(maxThreshold), null, null);
Assert.assertEquals(9, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
// pivot scenario
// ns = resourceManager.getAtMostNodes(1, new ThresholdProximityDescriptor(0, pivot), null, null);
// Assert.assertEquals(1, ns.size());
// for (Node node : ns) {
// if (node.getNodeInformation().getURL().equals(pivotNode.getNodeInformation().getURL())) {
// Assert.assertTrue("Pivot must not be in results", false);
// }
// if (node.getNodeInformation().getURL().contains(distantHost) ||
// node.getNodeInformation().getURL().contains(neighborHost)) {
// Assert.assertTrue("Incorrect node selected", false);
// }
// }
// resourceManager.releaseNodes(ns).getBooleanValue();
//
// ns = resourceManager.getAtMostNodes(6, new ThresholdProximityDescriptor(current2neighborDistance,
// pivot), null, null);
// Assert.assertEquals(6, ns.size());
// for (Node node : ns) {
// if (node.getNodeInformation().getURL().equals(pivotNode.getNodeInformation().getURL())) {
// Assert.assertTrue("Pivot must not be in results", false);
// }
// if (node.getNodeInformation().getURL().contains(distantHost)) {
// Assert.assertTrue("Node from distant host selected", false);
// }
// }
// resourceManager.releaseNodes(ns).getBooleanValue();
// checking TopologyDescriptor.SINGLE_HOST
ns = resourceManager.getAtMostNodes(1, TopologyDescriptor.SINGLE_HOST, null, null);
Assert.assertEquals(1, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(9, TopologyDescriptor.SINGLE_HOST, null, null);
Assert.assertEquals(6, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, TopologyDescriptor.SINGLE_HOST, null, null);
Assert.assertEquals(6, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, TopologyDescriptor.SINGLE_HOST, scriptList, null);
Assert.assertEquals(1, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
// checking TopologyDescriptor.SINGLE_HOST_EXCLUSIVE
ns = resourceManager.getAtMostNodes(1, TopologyDescriptor.SINGLE_HOST_EXCLUSIVE, null, null);
Assert.assertEquals(1, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
if (!ns.get(0).getNodeInformation().getURL().contains(neighborHost)) {
Assert.assertTrue("Neighbor host shold be selected", false);
}
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(9, TopologyDescriptor.SINGLE_HOST_EXCLUSIVE, null, null);
Assert.assertEquals(6, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(2, TopologyDescriptor.SINGLE_HOST_EXCLUSIVE, null, null);
Assert.assertEquals(2, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(3, TopologyDescriptor.SINGLE_HOST_EXCLUSIVE, null, null);
Assert.assertEquals(3, ns.size());
Assert.assertEquals(3, ns.getExtraNodes().size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, TopologyDescriptor.SINGLE_HOST_EXCLUSIVE, scriptList, null);
// no hosts matched selection script
Assert.assertEquals(0, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, TopologyDescriptor.SINGLE_HOST_EXCLUSIVE, null, null);
// return the host with max capacity
Assert.assertEquals(6, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
// checking TopologyDescriptor.MULTIPLE_HOSTS_EXCLUSIVE
ns = resourceManager.getAtMostNodes(1, TopologyDescriptor.MULTIPLE_HOSTS_EXCLUSIVE, null, null);
Assert.assertEquals(1, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(2, TopologyDescriptor.MULTIPLE_HOSTS_EXCLUSIVE, null, null);
Assert.assertEquals(2, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(3, TopologyDescriptor.MULTIPLE_HOSTS_EXCLUSIVE, null, null);
Assert.assertEquals(3, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(9, TopologyDescriptor.MULTIPLE_HOSTS_EXCLUSIVE, null, null);
Assert.assertEquals(9, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(8, TopologyDescriptor.MULTIPLE_HOSTS_EXCLUSIVE, null, null);
// current + distant has to be selected
Assert.assertEquals(8, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(7, TopologyDescriptor.MULTIPLE_HOSTS_EXCLUSIVE, null, null);
// current + neighbor has to be selected
Assert.assertEquals(7, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, TopologyDescriptor.MULTIPLE_HOSTS_EXCLUSIVE, scriptList, null);
// selection script specified => no such set
Assert.assertEquals(0, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(100, TopologyDescriptor.MULTIPLE_HOSTS_EXCLUSIVE, null, null);
// get max possible capacity
Assert.assertEquals(9, ns.size());
resourceManager.releaseNodes(ns).getBooleanValue();
// checking TopologyDescriptor.ONE_NODE_PER_HOST_EXCLUSIVE
ns = resourceManager.getAtMostNodes(1, TopologyDescriptor.DIFFERENT_HOSTS_EXCLUSIVE, null, null);
Assert.assertEquals(1, ns.size());
Assert.assertEquals(null, ns.getExtraNodes());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(2, TopologyDescriptor.DIFFERENT_HOSTS_EXCLUSIVE, null, null);
Assert.assertEquals(2, ns.size());
Assert.assertEquals(1, ns.getExtraNodes().size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(3, TopologyDescriptor.DIFFERENT_HOSTS_EXCLUSIVE, null, null);
Assert.assertEquals(3, ns.size());
Assert.assertEquals(6, ns.getExtraNodes().size());
resourceManager.releaseNodes(ns).getBooleanValue();
ns = resourceManager.getAtMostNodes(4, TopologyDescriptor.DIFFERENT_HOSTS_EXCLUSIVE, null, null);
Assert.assertEquals(3, ns.size());
Assert.assertEquals(6, ns.getExtraNodes().size());
resourceManager.releaseNodes(ns).getBooleanValue();
PAFuture.waitFor(resourceManager.removeNodeSource("remote", true));
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class RMTHelper method createNodes.
/**
* Create several nodes on the same JVMProcess
*/
public static List<TestNode> createNodes(final String nodeName, int number) throws IOException, NodeException, ExecutionException, InterruptedException, AlreadyBoundException {
if (number == 0) {
throw new IllegalArgumentException("" + number);
}
ArrayList<TestNode> nodes = new ArrayList<>(number);
// Start the JVMProcess and create the first node
TestNode node0 = createNode(nodeName + 0, findFreePort());
nodes.add(0, node0);
// create all subsequent nodes remotely
for (int i = 1; i < number; i++) {
Node nodei = node0.getNode().getProActiveRuntime().createLocalNode(nodeName + i, false, null);
nodes.add(new TestNode(node0.getNodeProcess(), nodei));
}
return nodes;
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class RMTHelper method createNode.
public static TestNode createNode(String nodeName, String expectedUrl, JVMProcess nodeProcess) throws IOException, NodeException, InterruptedException {
Node newNode = null;
long startTimeStamp = System.currentTimeMillis();
NodeException toThrow = null;
while ((System.currentTimeMillis() - startTimeStamp) < DEFAULT_NODES_TIMEOUT) {
try {
newNode = NodeFactory.getNode(expectedUrl);
} catch (NodeException e) {
toThrow = e;
// nothing, wait another loop
}
if (newNode != null) {
return new TestNode(nodeProcess, newNode);
} else {
Thread.sleep(100);
}
}
throw toThrow == null ? new NodeException("unable to create the node " + nodeName) : toThrow;
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class TaskProActiveDataspaces method initDataSpaces.
private void initDataSpaces() throws Exception {
long startTime = System.currentTimeMillis();
// configure node for application
String appId = taskId.toString();
// prepare scratch, input, output
Node node = PAActiveObject.getNode();
logger.info("Configuring dataspaces for app " + appId + " on " + node.getNodeInformation().getName());
DataSpacesNodes.configureApplication(node, appId, namingService);
SCRATCH = PADataSpaces.resolveScratchForAO();
logger.info("SCRATCH space is " + SCRATCH.getRealURI());
// Set the scratch folder writable for everyone
if (!SCRATCH.setWritable(true, false)) {
logger.warn("Missing permission to change write permissions to " + getScratchFolder());
}
InputOutputSpaceConfiguration cacheConfiguration = DataSpaceNodeConfigurationAgent.getCacheSpaceConfiguration();
if (cacheConfiguration != null) {
final String cacheName = cacheConfiguration.getName();
cacheSpaceInstanceInfo = new SpaceInstanceInfo(appId, cacheConfiguration);
try {
namingService.register(cacheSpaceInstanceInfo);
} catch (SpaceAlreadyRegisteredException e) {
// this is a rare case where the cache space has already been registered for the same task and there was a node failure.
namingService.unregister(cacheSpaceInstanceInfo.getMountingPoint());
namingService.register(cacheSpaceInstanceInfo);
}
CACHE = initDataSpace(new Callable<DataSpacesFileObject>() {
@Override
public DataSpacesFileObject call() throws Exception {
return PADataSpaces.resolveOutput(cacheName);
}
}, "CACHE", false);
} else {
logger.error("No Cache space configuration found, cache space is disabled.");
}
INPUT = initDataSpace(new Callable<DataSpacesFileObject>() {
@Override
public DataSpacesFileObject call() throws Exception {
return PADataSpaces.resolveDefaultInput();
}
}, "INPUT", true);
OUTPUT = initDataSpace(new Callable<DataSpacesFileObject>() {
@Override
public DataSpacesFileObject call() throws Exception {
return PADataSpaces.resolveDefaultOutput();
}
}, "OUTPUT", false);
GLOBAL = initDataSpace(new Callable<DataSpacesFileObject>() {
@Override
public DataSpacesFileObject call() throws Exception {
return PADataSpaces.resolveOutput(SchedulerConstants.GLOBALSPACE_NAME);
}
}, "GLOBAL", false);
USER = initDataSpace(new Callable<DataSpacesFileObject>() {
@Override
public DataSpacesFileObject call() throws Exception {
return PADataSpaces.resolveOutput(SchedulerConstants.USERSPACE_NAME);
}
}, "USER", false);
logger.info("Time needed to mount data spaces: " + (System.currentTimeMillis() - startTime) + " ms");
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class SchedulingMethodImpl method selectAndStartTasks.
private int selectAndStartTasks(Policy currentPolicy, Map<JobId, JobDescriptor> jobMap, Set<String> freeResources, LinkedList<EligibleTaskDescriptor> fullListOfTaskRetrievedFromPolicy) {
int numberOfTaskStarted = 0;
VariableBatchSizeIterator progressiveIterator = new VariableBatchSizeIterator(fullListOfTaskRetrievedFromPolicy);
while (progressiveIterator.hasMoreElements() && !freeResources.isEmpty()) {
LinkedList<EligibleTaskDescriptor> taskRetrievedFromPolicy = new LinkedList<>(progressiveIterator.getNextElements(freeResources.size()));
if (logger.isDebugEnabled()) {
loggingEligibleTasksDetails(fullListOfTaskRetrievedFromPolicy, taskRetrievedFromPolicy);
}
updateVariablesForTasksToSchedule(taskRetrievedFromPolicy);
for (EligibleTaskDescriptor etd : taskRetrievedFromPolicy) {
// load and Initialize the executable container
loadAndInit(((EligibleTaskDescriptorImpl) etd).getInternal());
}
while (!taskRetrievedFromPolicy.isEmpty()) {
if (freeResources.isEmpty()) {
break;
}
// get the next compatible tasks from the whole returned policy tasks
LinkedList<EligibleTaskDescriptor> tasksToSchedule = new LinkedList<>();
int neededResourcesNumber = 0;
while (!taskRetrievedFromPolicy.isEmpty() && neededResourcesNumber == 0) {
// the loop will search for next compatible task until it find something
neededResourcesNumber = getNextcompatibleTasks(jobMap, taskRetrievedFromPolicy, freeResources.size(), tasksToSchedule);
}
if (logger.isDebugEnabled()) {
logger.debug("tasksToSchedule : " + tasksToSchedule);
}
logger.debug("required number of nodes : " + neededResourcesNumber);
if (neededResourcesNumber == 0 || tasksToSchedule.isEmpty()) {
break;
}
NodeSet nodeSet = getRMNodes(jobMap, neededResourcesNumber, tasksToSchedule, freeResources);
if (nodeSet != null) {
freeResources.removeAll(nodeSet.getAllNodesUrls());
}
// start selected tasks
Node node = null;
InternalJob currentJob = null;
try {
while (nodeSet != null && !nodeSet.isEmpty()) {
EligibleTaskDescriptor taskDescriptor = tasksToSchedule.removeFirst();
currentJob = ((JobDescriptorImpl) jobMap.get(taskDescriptor.getJobId())).getInternal();
InternalTask internalTask = ((EligibleTaskDescriptorImpl) taskDescriptor).getInternal();
if (currentPolicy.isTaskExecutable(nodeSet, taskDescriptor)) {
// create launcher and try to start the task
node = nodeSet.get(0);
if (createExecution(nodeSet, node, currentJob, internalTask, taskDescriptor)) {
numberOfTaskStarted++;
}
}
// if every task that should be launched have been removed
if (tasksToSchedule.isEmpty()) {
// get back unused nodes to the RManager
if (!nodeSet.isEmpty()) {
releaseNodes(currentJob, nodeSet);
freeResources.addAll(nodeSet.getAllNodesUrls());
}
// and leave the loop
break;
}
}
} catch (ActiveObjectCreationException e1) {
// Something goes wrong with the active object creation (createLauncher)
logger.warn("An exception occured while creating the task launcher.", e1);
// so try to get back every remaining nodes to the resource manager
try {
releaseNodes(currentJob, nodeSet);
freeResources.addAll(nodeSet.getAllNodesUrls());
} catch (Exception e2) {
logger.info("Unable to get back the nodeSet to the RM", e2);
}
if (--activeObjectCreationRetryTimeNumber == 0) {
break;
}
} catch (Exception e1) {
// if we are here, it is that something append while launching the current task.
logger.warn("An exception occured while starting task.", e1);
// so try to get back every remaining nodes to the resource manager
try {
releaseNodes(currentJob, nodeSet);
freeResources.addAll(nodeSet.getAllNodesUrls());
} catch (Exception e2) {
logger.info("Unable to get back the nodeSet to the RM", e2);
}
}
}
if (freeResources.isEmpty()) {
break;
}
if (activeObjectCreationRetryTimeNumber == 0) {
break;
}
}
return numberOfTaskStarted;
}
Aggregations