use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class RMNodeStarter method killWorkerNodeIfRemovedByUser.
private void killWorkerNodeIfRemovedByUser(Map<String, Node> nodes, String unknownNodeUrl) {
Node node = nodes.get(unknownNodeUrl);
if (node == null) {
logger.warn("The RM has sent back an URL that was not published by the Node: " + unknownNodeUrl);
} else {
// The node URL which has been published to the RMCore is unknown.
// It means the node has been removed by a user
String nodeName = node.getNodeInformation().getName();
try {
// Kill the local worker node
node.getProActiveRuntime().killNode(nodeName);
} catch (Exception e) {
logger.warn("Killing the local node has failed: " + nodeName, e);
} finally {
nodes.remove(unknownNodeUrl);
logger.info("Node " + unknownNodeUrl + " has been removed ");
}
}
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class RMNodeStarter method createNodes.
private Map<String, Node> createNodes(String nodeName) {
Map<String, Node> nodes = new HashMap<>(workers);
List<String> createdNodeNames = getWorkersNodeNames(nodeName, workers);
for (int nodeIndex = 0; nodeIndex < workers; nodeIndex++) {
Node node = createLocalNode(createdNodeNames.get(nodeIndex));
configureForDataSpace(node);
String nodeUrl = node.getNodeInformation().getURL();
nodes.put(nodeUrl, node);
logger.info("URL of node " + nodeIndex + " " + nodeUrl);
}
return nodes;
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class RMFactory method startLocal.
/**
* Creates and starts a Resource manager on the local host using the given initializer to configure it.
* Only one RM can be started by JVM.
*
* @param initializer Use to configure the Resource Manager before starting it.
* This parameter can be null, if so the Resource Manager will try to start on the JVM properties and
* the "pa.rm.home" property MUST be set to the root of the RM directory.
* @return a RM authentication that allow you to administer the RM or get its connection URL.
*
* @throws NodeException If the RM's node can't be created
* @throws ActiveObjectCreationException If RMCore cannot be created
* @throws AlreadyBoundException if a node with the same RMNode's name is already exist.
* @throws IOException If node and RMCore fails.
* @throws RMException if the connection to the authentication interface fails.
*/
public static RMAuthentication startLocal(RMInitializer initializer) throws Exception {
if (rmcore == null) {
if (initializer != null) {
// configure application
configure(initializer);
}
configureLog4j();
Node nodeRM = NodeFactory.createLocalNode(PAResourceManagerProperties.RM_NODE_NAME.getValueAsString(), false, null, null);
String RMCoreName = RMConstants.NAME_ACTIVE_OBJECT_RMCORE;
rmcore = (RMCore) // the class to deploy
PAActiveObject.newActive(// the class to deploy
RMCore.class.getName(), new Object[] { RMCoreName, nodeRM }, nodeRM);
logger.debug("New RM core started locally");
return RMConnection.waitAndJoin(null);
} else {
throw new RMException("RM Core already running locally");
}
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class NodesRecoveryManager method recoverNodes.
protected void recoverNodes(NodeSource nodeSource) {
// this log line is important for performance tests
logger.info(START_TO_RECOVER_NODES);
int lookUpTimeout = PAResourceManagerProperties.RM_NODELOOKUP_TIMEOUT.getValueAsInt();
String nodeSourceName = nodeSource.getName();
this.logWarnIfNodeSourceHasNoNode(nodeSource, nodeSourceName);
Collection<RMNodeData> nodesData = this.rmCore.getDbManager().getNodesByNodeSource(nodeSourceName);
logger.info("Number of nodes found in database for node source " + nodeSourceName + ": " + nodesData.size());
List<RMNode> recoveredEligibleNodes = Collections.synchronizedList(new ArrayList<RMNode>());
Map<NodeState, Integer> recoveredNodeStatesCounter = new HashMap<>();
// as down node
for (RMNodeData rmNodeData : nodesData) {
String nodeUrl = rmNodeData.getNodeUrl();
Node node = this.tryToLookupNode(nodeSource, lookUpTimeout, nodeUrl);
RMNode rmnode = this.recoverRMNode(nodeSource, recoveredNodeStatesCounter, rmNodeData, nodeUrl, node);
if (this.isEligible(rmnode)) {
recoveredEligibleNodes.add(rmnode);
}
}
this.rmCore.setEligibleNodesToRecover(recoveredEligibleNodes);
this.logNodeRecoverySummary(nodeSourceName, recoveredNodeStatesCounter, recoveredEligibleNodes.size());
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class RamSchedulingPolicy method canRunTaskOnNode.
private boolean canRunTaskOnNode(NodeSet selectedNodes, EligibleTaskDescriptor task, double neededRam) {
Node n = selectedNodes.get(0);
try {
double freeRam = getFreeRamFromNode(n);
logger.debug("Free Ram for node (" + n.getNodeInformation().getName() + ") : " + freeRam + " , neededRam : " + neededRam);
if (freeRam >= neededRam) {
logger.debug("Task " + ((EligibleTaskDescriptorImpl) task).getInternal().getName() + " can execute on " + n);
n.setProperty(RAM_VARIABLE_NAME, "" + neededRam);
return true;
}
} catch (Exception e) {
logger.error("Error while setting the property " + RAM_VARIABLE_NAME);
throw new RuntimeException(e);
}
return false;
}
Aggregations