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);
}
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);
}
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);
}
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);
}
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.
}
Aggregations