use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class NodeSourcePriorityPolicy method arrangeNodes.
/**
* Sort by node source priorities.
*
* @return the list arranged according to the node source priorities
*/
public List<RMNode> arrangeNodes(int number, List<RMNode> nodes, Client client) {
if (nodeSources == null) {
logger.error("The policy config was not loaded");
return nodes;
}
if (nodeSources.size() == 0) {
logger.debug("The policy config is empty");
return nodes;
}
reloadConfig();
logger.debug("Arranging nodes according to node sources priorities");
HashMap<String, List<RMNode>> nodesMap = new HashMap<>();
for (RMNode node : nodes) {
if (!nodesMap.containsKey(node.getNodeSourceName())) {
nodesMap.put(node.getNodeSourceName(), new LinkedList<RMNode>());
}
nodesMap.get(node.getNodeSourceName()).add(node);
}
List<RMNode> arranged = new LinkedList<>();
for (String ns : nodeSources) {
if (nodesMap.containsKey(ns)) {
logger.debug("Adding " + nodesMap.get(ns).size() + " nodes from " + ns);
arranged.addAll(nodesMap.get(ns));
nodesMap.remove(ns);
if (arranged.size() >= number) {
break;
}
}
}
for (String ns : nodesMap.keySet()) {
logger.debug("Adding nodes from " + ns);
arranged.addAll(nodesMap.get(ns));
}
return arranged;
}
use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class ProbablisticSelectionManager method isPassed.
/**
* Predicts script execution result. Allows to avoid duplicate script execution
* on the same node.
*
* @param script - script to execute
* @param rmnode - target node
* @return true if script will pass on the node
*/
@Override
public synchronized boolean isPassed(SelectionScript script, Map<String, Serializable> bindings, RMNode rmnode) {
String digest;
SelectionScript scriptWithReplacedBindings = replaceBindings(script, bindings);
try {
digest = new String(scriptWithReplacedBindings.digest());
if (probabilities.containsKey(digest) && probabilities.get(digest).containsKey(rmnode.getNodeURL())) {
Probability p = probabilities.get(digest).get(rmnode.getNodeURL());
String scriptType = scriptWithReplacedBindings.isDynamic() ? "dynamic" : "static";
if (logger.isDebugEnabled())
logger.debug(rmnode.getNodeURL() + " : " + scriptWithReplacedBindings.hashCode() + " known " + scriptType + " script");
return p.value() == 1;
}
} catch (NoSuchAlgorithmException e) {
logger.error(e.getMessage(), e);
}
if (logger.isDebugEnabled())
logger.debug(rmnode.getNodeURL() + " : " + scriptWithReplacedBindings.hashCode() + " unknown script");
return false;
}
use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class TopologyNodesFilter method filterBySingleHost.
private List<RMNode> filterBySingleHost(Criteria criteria, List<RMNode> arrangedNodes) {
List<RMNode> arrangedFilteredNodes = new LinkedList<>();
Map<String, List<RMNode>> groupedNodeByHost = new LinkedHashMap<>();
for (RMNode node : arrangedNodes) {
if (!groupedNodeByHost.containsKey(node.getHostName())) {
groupedNodeByHost.put(node.getHostName(), new LinkedList<RMNode>());
}
groupedNodeByHost.get(node.getHostName()).add(node);
}
for (String host : groupedNodeByHost.keySet()) {
if (groupedNodeByHost.get(host).size() >= criteria.getSize()) {
arrangedFilteredNodes.addAll(groupedNodeByHost.get(host));
}
}
return arrangedFilteredNodes;
}
use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class NodesLockRestorationManagerTest method testHandleNotInitialized.
@Test
public void testHandleNotInitialized() {
// creates a node that matches an entry in the table specifying the nodes to lock
RMNodeImpl rmNode = RMNodeHelper.basicWithMockedInternals("ns1", "n1", "h1", "nurl1", "parurl1").getLeft();
assertThat(rmNode.isLocked()).isFalse();
Map<String, MutableInteger> table = Maps.newHashMap();
MutableInteger putResult = table.put("ns", new MutableInteger(1));
assertThat(putResult).isNull();
doReturn(table).when(nodesLockRestorationManager).findNodesLockedOnPreviousRun();
assertThat(table).hasSize(1);
verify(rmCore, never()).lockNodes(anySetOf(String.class));
nodesLockRestorationManager.handle(rmNode, caller);
assertThat(table).hasSize(1);
verify(rmCore, never()).lockNodes(anySetOf(String.class));
}
use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.
the class NodesLockRestorationManagerTest method testHandleNodeAlreadyLocked.
@Test
public void testHandleNodeAlreadyLocked() {
RMNodeImpl rmNode = RMNodeHelper.basicWithMockedInternals("ns1", "n1", "h1", "nurl1", "parurl1").getLeft();
rmNode.lock(null);
assertThat(rmNode.isLocked()).isTrue();
Map<String, MutableInteger> table = Maps.newHashMap();
MutableInteger putResult = table.put("ns", new MutableInteger(1));
assertThat(putResult).isNull();
doReturn(table).when(nodesLockRestorationManager).findNodesLockedOnPreviousRun();
nodesLockRestorationManager.initialize();
assertThat(nodesLockRestorationManager.isInitialized()).isTrue();
verify(nodesLockRestorationManager).findNodesLockedOnPreviousRun();
assertThat(table).hasSize(1);
verify(rmCore, never()).lockNodes(anySetOf(String.class));
nodesLockRestorationManager.handle(rmNode, caller);
assertThat(table).hasSize(1);
verify(rmCore, never()).lockNodes(anySetOf(String.class));
}
Aggregations