use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class ProbabilisticSelectionManagerTest method testIncreasingProbabilityStatic.
@Test
public void testIncreasingProbabilityStatic() throws Exception {
int nbNodes = 10;
SelectionScript script = new SelectionScript("test", "groovy", false);
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, but it should not change the result for static scripts
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 initial order
for (int i = 0; i < nbNodes; i++) {
Assert.assertEquals("mocked-node-" + (i + 1), arrangedNodes.get(i).getNodeName());
Assert.assertTrue(selectionManager.isPassed(script, Collections.EMPTY_MAP, arrangedNodes.get(i)));
}
}
use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class RMCore method getNodeByUrlIncludingDeployingNodes.
protected RMNode getNodeByUrlIncludingDeployingNodes(String url) {
RMNode nodeByUrl = getNodebyUrl(url);
if (nodeByUrl != null) {
return nodeByUrl;
} else {
String[] chunks = url.split("/");
if (chunks.length >= 3) {
String nodeSourceName = chunks[2];
NodeSource nodeSource = this.deployedNodeSources.get(nodeSourceName);
if (nodeSource != null) {
return nodeSource.getNodeInDeployingOrLostNodes(url);
}
}
}
return null;
}
use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class RMCore method setDownNode.
/**
* Sets a node state to down and updates all internal structures of rm core
* accordingly. Sends an event indicating that the node is down.
*/
public void setDownNode(String nodeUrl) {
RMNode rmNode = getNodebyUrl(nodeUrl);
if (rmNode != null) {
// If the node is already down no need to go further
if (rmNode.isDown()) {
return;
}
logger.info("The node " + rmNode.getNodeURL() + " provided by " + rmNode.getProvider() + " is down");
// Get the previous state of the node needed for the event
final NodeState previousNodeState = rmNode.getState();
if (rmNode.isFree()) {
eligibleNodes.remove(rmNode);
}
rmNode.setDown();
persistUpdatedRMNodeIfRecoveryEnabled(rmNode);
// create the event
this.registerAndEmitNodeEvent(rmNode.createNodeEvent(RMEventType.NODE_STATE_CHANGED, previousNodeState, rmNode.getProvider().getName()));
} else {
// the nodes has been removed from core asynchronously
// when pinger of selection manager tried to access it
// do nothing in this case
logger.debug("setDownNode returned immediately because the node " + nodeUrl + " was not known");
}
}
use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class RMCore method checkNodeAdminPermission.
/**
* Checks if the client is the node admin.
*
* @param rmnode is a node to be checked
* @param client is a client to be checked
* @return true if the client is an admin, SecurityException otherwise
*/
private boolean checkNodeAdminPermission(RMNode rmnode, Client client) {
NodeSource nodeSource = rmnode.getNodeSource();
String errorMessage = client.getName() + " is not authorized to manage node " + rmnode.getNodeURL() + " from " + rmnode.getNodeSourceName();
// a node provider
try {
// checking if the caller is an administrator
client.checkPermission(nodeSource.getAdminPermission(), errorMessage);
} catch (SecurityException ex) {
// the caller is not an administrator, so checking if it is a node provider
client.checkPermission(rmnode.getAdminPermission(), errorMessage);
}
return true;
}
use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class RMCore method removeNodes.
/**
* Removes "number" of nodes from the node source.
*
* @param number amount of nodes to be released
* @param nodeSourceName a node source name
* @param preemptive if true remove nodes immediately without waiting while they will be freed
*/
public void removeNodes(int number, String nodeSourceName, boolean preemptive) {
int numberOfRemovedNodes = 0;
// temporary list to avoid concurrent modification
List<RMNode> nodelList = new LinkedList<>();
nodelList.addAll(eligibleNodes);
logger.debug("Free nodes size " + nodelList.size());
for (RMNode node : nodelList) {
if (numberOfRemovedNodes == number) {
break;
}
if (node.getNodeSource().getName().equals(nodeSourceName)) {
removeNode(node.getNodeURL(), preemptive);
numberOfRemovedNodes++;
}
}
nodelList.clear();
nodelList.addAll(allNodes.values());
logger.debug("All nodes size " + nodelList.size());
if (numberOfRemovedNodes < number) {
for (RMNode node : nodelList) {
if (numberOfRemovedNodes == number) {
break;
}
if (node.isBusy() && node.getNodeSource().getName().equals(nodeSourceName)) {
removeNode(node.getNodeURL(), preemptive);
numberOfRemovedNodes++;
}
}
}
if (numberOfRemovedNodes < number) {
logger.warn("Cannot remove " + number + " nodes from node source " + nodeSourceName);
}
}
Aggregations