Search in sources :

Example 66 with RMNode

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

the class RMCore method internalAddNodeToCore.

/**
 * Internal operation of registering a new node in the Core
 * This step is done after node configuration ran by {@link RMNodeConfigurator} active object.
 *
 * @param configuredNode the node that is going to be added.
 */
public void internalAddNodeToCore(RMNode configuredNode) {
    String nodeURL = configuredNode.getNodeURL();
    if (!this.allNodes.containsKey(nodeURL)) {
        // does nothing, the node has been removed preemptively
        // during its configuration
        logger.debug("internalAddNodeToCore returned immediately because the node " + nodeURL + " was not known");
        return;
    }
    // was added during internalRegisterConfiguringNode
    RMNode rmnode = this.allNodes.get(nodeURL);
    registerAvailableNode(configuredNode);
    if (toShutDown) {
        logger.warn("Node " + rmnode.getNodeURL() + " will not be added to the core as the resource manager is shutting down");
        removeNodeFromCoreAndSource(rmnode, rmnode.getProvider());
        return;
    }
    // noinspection ConstantConditions
    if (isNumberOfNodesLimited() && isMaximumNumberOfNodesReachedIncludingAskingNode()) {
        logger.warn("Node " + rmnode.getNodeURL() + " is removed because the Resource Manager is limited to " + maximumNumberOfNodes + " nodes." + CONTACT_UPGRADE_MESSAGE);
        removeNodeFromCoreAndSource(rmnode, rmnode.getProvider());
        throw new AddingNodesException("Maximum number of nodes reached: " + maximumNumberOfNodes + ". " + CONTACT_UPGRADE_MESSAGE);
    }
    // during the configuration process, the rmnode can be removed. Its state would be toRemove
    if (rmnode.isToRemove()) {
        removeNodeFromCoreAndSource(rmnode, rmnode.getProvider());
        return;
    }
    // discarding the registration
    if (rmnode.isDown()) {
        logger.debug("internalAddNodeToCore returned immediately because the node " + nodeURL + " is already down");
        return;
    }
    internalSetFree(configuredNode);
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) AddingNodesException(org.ow2.proactive.resourcemanager.exception.AddingNodesException)

Example 67 with RMNode

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

the class RMCore method releaseBusyNodesNotInList.

@Override
public void releaseBusyNodesNotInList(List<NodeSet> nodesToNotRelease) {
    Set<String> nodesUrlToNotRelease = new HashSet<>();
    for (NodeSet nodeSet : nodesToNotRelease) {
        nodesUrlToNotRelease.addAll(nodeSet.getAllNodesUrls());
    }
    List<RMNode> busyNodesToRelease = findBusyNodesNotInSet(nodesUrlToNotRelease);
    nodesCleaner.cleanAndRelease(busyNodesToRelease);
}
Also used : NodeSet(org.ow2.proactive.utils.NodeSet) RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) HashSet(java.util.HashSet)

Example 68 with RMNode

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

the class RMCore method removeNode.

public BooleanWrapper removeNode(String nodeUrl, boolean preempt, boolean isTriggeredFromShutdownHook) {
    // if we get a "deploying node url" we change the flow
    if (RMNodeHelper.isDeployingNodeURL(nodeUrl)) {
        RMNode deployingNode = getNodeByUrlIncludingDeployingNodes(nodeUrl);
        if (!isTriggeredFromShutdownHook && deployingNode != null && deployingNode.isLocked()) {
            dbManager.createLockEntryOrUpdate(deployingNode.getNodeSourceName(), RMDBManager.NodeLockUpdateAction.DECREMENT);
        }
        return new BooleanWrapper(removeDeployingNode(nodeUrl));
    }
    if (this.allNodes.containsKey(nodeUrl)) {
        RMNode rmnode = this.allNodes.get(nodeUrl);
        logger.debug("Request to remove node " + rmnode);
        // checking if the caller is the node administrator
        checkNodeAdminPermission(rmnode, caller);
        if (!isTriggeredFromShutdownHook && rmnode.isLocked()) {
            dbManager.createLockEntryOrUpdate(rmnode.getNodeSourceName(), RMDBManager.NodeLockUpdateAction.DECREMENT);
        }
        if (rmnode.isDown() || preempt || rmnode.isFree() || rmnode.isLocked()) {
            removeNodeFromCoreAndSource(rmnode, caller);
        } else if (rmnode.isBusy() || rmnode.isConfiguring()) {
            internalSetToRemove(rmnode, caller);
        }
    } else {
        logger.warn("An attempt to remove a non existing node: " + nodeUrl + " was made. Ignoring it");
        return new BooleanWrapper(false);
    }
    return new BooleanWrapper(true);
}
Also used : BooleanWrapper(org.objectweb.proactive.core.util.wrapper.BooleanWrapper) RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode)

Example 69 with RMNode

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

the class RMCore method restoreNodeState.

@VisibleForTesting
void restoreNodeState(String nodeUrl, RMNode node) {
    NodeState previousNodeState = node.getLastEvent().getPreviousNodeState();
    if (previousNodeState == NodeState.BUSY) {
        logger.info("Restoring DOWN node to BUSY: " + nodeUrl);
        setBusyNode(nodeUrl, node.getOwner());
    } else {
        logger.info("Restoring DOWN node to FREE: " + nodeUrl);
        internalSetFree(node);
    }
    node.getNodeSource().setNodeAvailable(node);
}
Also used : NodeState(org.ow2.proactive.resourcemanager.common.NodeState) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 70 with RMNode

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

the class RMCore method executeScript.

/**
 * {@inheritDoc}
 */
public <T> List<ScriptResult<T>> executeScript(Script<T> script, String targetType, Set<String> targets) {
    // Depending on the target type, select nodes for script execution
    final TargetType tType = TargetType.valueOf(targetType);
    final HashSet<RMNode> selectedRMNodes = new HashSet<>();
    switch(tType) {
        case NODESOURCE_NAME:
            // If target is a nodesource name select all its nodes
            for (String target : targets) {
                NodeSource nodeSource = this.deployedNodeSources.get(target);
                if (nodeSource != null) {
                    for (RMNode candidateNode : this.allNodes.values()) {
                        if (candidateNode.getNodeSource().equals(nodeSource)) {
                            this.selectCandidateNode(selectedRMNodes, candidateNode);
                        }
                    }
                }
            }
            break;
        case NODE_URL:
            // If target is node url select the node
            for (String target : targets) {
                RMNode candidateNode = this.allNodes.get(target);
                if (candidateNode != null) {
                    this.selectCandidateNode(selectedRMNodes, candidateNode);
                }
            }
            break;
        case HOSTNAME:
            // If target is hostname select first node from that host
            for (String target : targets) {
                for (RMNode node : this.allNodes.values()) {
                    if (node.getHostName().equals(target)) {
                        this.selectCandidateNode(selectedRMNodes, node);
                        break;
                    }
                }
            }
            break;
        default:
            throw new IllegalArgumentException("Unable to execute script, unknown target type: " + targetType);
    }
    // Return a ProActive future on the list of results
    return this.selectionManager.executeScript(script, selectedRMNodes, null);
// To avoid blocking rmcore ao the call is delegated to the selection
// manager ao and each node is unlocked as soon as the script has
// finished it's execution.
}
Also used : NodeSource(org.ow2.proactive.resourcemanager.nodesource.NodeSource) RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) TargetType(org.ow2.proactive.resourcemanager.utils.TargetType) HashSet(java.util.HashSet)

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