Search in sources :

Example 6 with RMNode

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)));
    }
}
Also used : SelectionManager(org.ow2.proactive.resourcemanager.selection.SelectionManager) SelectionScript(org.ow2.proactive.scripting.SelectionScript) RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) SelectionManagerTest(org.ow2.proactive.resourcemanager.selection.SelectionManagerTest) Test(org.junit.Test)

Example 7 with RMNode

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;
}
Also used : NodeSource(org.ow2.proactive.resourcemanager.nodesource.NodeSource) RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode)

Example 8 with RMNode

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");
    }
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) NodeState(org.ow2.proactive.resourcemanager.common.NodeState)

Example 9 with RMNode

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;
}
Also used : NodeSource(org.ow2.proactive.resourcemanager.nodesource.NodeSource)

Example 10 with RMNode

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);
    }
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) LinkedList(java.util.LinkedList)

Aggregations

RMNode (org.ow2.proactive.resourcemanager.rmnode.RMNode)55 Test (org.junit.Test)27 Node (org.objectweb.proactive.core.node.Node)12 BooleanWrapper (org.objectweb.proactive.core.util.wrapper.BooleanWrapper)12 Client (org.ow2.proactive.resourcemanager.authentication.Client)12 SelectionScript (org.ow2.proactive.scripting.SelectionScript)12 ArrayList (java.util.ArrayList)11 RMDeployingNode (org.ow2.proactive.resourcemanager.rmnode.RMDeployingNode)11 LinkedList (java.util.LinkedList)10 RMNodeImpl (org.ow2.proactive.resourcemanager.rmnode.RMNodeImpl)10 SelectionManager (org.ow2.proactive.resourcemanager.selection.SelectionManager)8 NodeState (org.ow2.proactive.resourcemanager.common.NodeState)7 NodeSource (org.ow2.proactive.resourcemanager.nodesource.NodeSource)7 Permission (java.security.Permission)6 SelectionManagerTest (org.ow2.proactive.resourcemanager.selection.SelectionManagerTest)6 NodeSet (org.ow2.proactive.utils.NodeSet)6 HashMap (java.util.HashMap)5 HashSet (java.util.HashSet)5 MutableInteger (org.objectweb.proactive.core.util.MutableInteger)5 PrincipalPermission (org.ow2.proactive.permissions.PrincipalPermission)5