Search in sources :

Example 76 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.

the class NodesCleaner method cleanAndRelease.

/**
 * Cleans nodes in parallel for the nodes specified.
 *
 * @param nodes to be cleaned
 * @return true if all the nodes were freed, false if error occurs on one of the node (it will be marked as down in this case)
 */
public BooleanWrapper cleanAndRelease(List<RMNode> nodes) {
    List<Callable<Boolean>> cleaners = new LinkedList<>();
    for (RMNode node : nodes) {
        logger.debug("Cleaning the node " + node.getNodeURL());
        cleaners.add(new NodeCleaner(node));
    }
    try {
        Collection<Future<Boolean>> cleanNodes = scriptExecutorThreadPool.invokeAll(cleaners);
        int index = 0;
        for (Future<Boolean> cleanNode : cleanNodes) {
            RMNode node = nodes.get(index);
            if (!cleanNode.isCancelled()) {
                Boolean isClean = null;
                try {
                    isClean = cleanNode.get();
                    if (!isClean.booleanValue()) {
                        logger.warn("Cannot clean the node " + node.getNodeURL());
                        rmcore.setDownNode(node.getNodeURL());
                    } else {
                        logger.debug("The node " + node.getNodeURL() + " has been successfully cleaned");
                    }
                } catch (ExecutionException e) {
                    logger.warn("Cannot clean the node " + node.getNodeURL(), e);
                    rmcore.setDownNode(node.getNodeURL());
                }
            } else {
                logger.warn("Cannot clean the node " + node.getNodeURL());
                rmcore.setDownNode(node.getNodeURL());
            }
            index++;
        }
        // in this case rmcore.setFreeNodes() will return false
        return rmcore.setFreeNodes(nodes);
    } catch (InterruptedException e) {
        logger.error("", e);
    }
    return new BooleanWrapper(false);
}
Also used : Callable(java.util.concurrent.Callable) LinkedList(java.util.LinkedList) BooleanWrapper(org.objectweb.proactive.core.util.wrapper.BooleanWrapper) RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) Future(java.util.concurrent.Future) ExecutionException(java.util.concurrent.ExecutionException)

Example 77 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode 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());
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) NodeState(org.ow2.proactive.resourcemanager.common.NodeState) HashMap(java.util.HashMap) RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) Node(org.objectweb.proactive.core.node.Node) RMNodeData(org.ow2.proactive.resourcemanager.db.RMNodeData)

Example 78 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.

the class NodesRecoveryManager method recoverNodeInternally.

private RMNode recoverNodeInternally(NodeSource nodeSource, RMNodeData rmNodeData, String nodeUrl, Node node) {
    RMNode rmNode = null;
    // information to the node data retrieved in database.
    if (rmNodeData.equalsToNode(node)) {
        logger.info("Node to recover could successfully be looked up at URL: " + nodeUrl);
        rmNode = nodeSource.internalAddNodeAfterRecovery(node, rmNodeData);
        this.rmCore.registerAvailableNode(rmNode);
    } else {
        logger.error("The node that has been looked up does not have the same information as the node to recover: " + node.getNodeInformation().getName() + " is not equal to " + rmNodeData.getName() + " or " + node.getNodeInformation().getURL() + " is not equal to " + rmNodeData.getNodeUrl());
    }
    return rmNode;
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode)

Example 79 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.

the class NodesRecoveryManager method recoverRMNode.

private RMNode recoverRMNode(NodeSource nodeSource, Map<NodeState, Integer> nodeStates, RMNodeData rmNodeData, String nodeUrl, Node node) {
    RMNode rmnode = null;
    if (node != null) {
        rmnode = this.recoverNodeInternally(nodeSource, rmNodeData, nodeUrl, node);
        this.nodesLockRestorationManager.handle(rmnode, rmNodeData.getProvider());
        this.updateRecoveredNodeStateCounter(nodeStates, rmnode.getState());
    } else {
        // the node is not recoverable and does not appear in any data
        // structures: we can remove it safely from database
        this.rmCore.getDbManager().removeNode(rmNodeData, rmNodeData.getNodeSource().getName());
        this.markNodesNotInDeployingStateAsDown(nodeSource, rmNodeData, nodeUrl);
        this.updateRecoveredNodeStateCounter(nodeStates, NodeState.DOWN);
    }
    return rmnode;
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode)

Example 80 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.

the class RMCore method disconnect.

/**
 * Disconnects the client and releases all nodes held by him
 */
public void disconnect(UniqueID clientId) {
    Client client = RMCore.clients.remove(clientId);
    if (client != null) {
        List<RMNode> nodesToRelease = new LinkedList<>();
        // expensive but relatively rare operation
        for (RMNode rmnode : new ArrayList<>(allNodes.values())) {
            // the same connection
            if (client.equals(rmnode.getOwner()) && clientId.equals(rmnode.getOwner().getId())) {
                if (rmnode.isToRemove()) {
                    removeNodeFromCoreAndSource(rmnode, client);
                } else if (rmnode.isBusy()) {
                    nodesToRelease.add(rmnode);
                }
            }
        }
        // Force the nodes cleaning here to avoid the situation
        // when the disconnected client still uses nodes.
        // In the future we may clean nodes for any release request
        nodesCleaner.cleanAndRelease(nodesToRelease);
        // update the connection info in the DB
        if (client.getHistory() != null) {
            UserHistory userHistory = client.getHistory();
            userHistory.setEndTime(System.currentTimeMillis());
            dbManager.updateUserHistory(userHistory);
        }
        logger.info(client + " disconnected from " + client.getId().shortString());
    } else {
        logger.warn("Trying to disconnect unknown client with id " + clientId.shortString());
    }
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) UserHistory(org.ow2.proactive.resourcemanager.core.history.UserHistory) ArrayList(java.util.ArrayList) Client(org.ow2.proactive.resourcemanager.authentication.Client) 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