use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class RMCore method getRMInitialState.
/**
* Builds and returns a snapshot of RMCore's current state. Initial state
* must be understood as a new Monitor point of view. A new monitor start to
* receive RMCore events, so must be informed of the current state of the
* Core at the beginning of monitoring. The monitor is built in three parts
* first with all the nodes knows by the RMCore, then with all deploying
* nodes known by the deployed node sources and then with all the defined
* node sources.
*
* @return RMInitialState containing nodes and nodeSources of the RMCore.
*/
public RMInitialState getRMInitialState() {
final Map<String, RMNodeEvent> nodeEvents = this.allNodes.values().stream().map(RMNode::createNodeEvent).collect(Collectors.toMap(RMNodeEvent::getNodeUrl, event -> event));
for (NodeSource source : this.deployedNodeSources.values()) {
for (RMDeployingNode node : source.getDeployingAndLostNodes()) {
final RMNodeEvent nodeEvent = node.createNodeEvent();
nodeEvents.put(nodeEvent.getNodeUrl(), nodeEvent);
}
}
final List<RMNodeSourceEvent> nodeSourceEvents = new ArrayList<>(this.definedNodeSources.values().stream().map(NodeSource::createNodeSourceEvent).collect(Collectors.toList()));
long eventCounter = 0;
for (RMNodeSourceEvent nodeSourceEvent : nodeSourceEvents) {
nodeSourceEvent.setCounter(eventCounter++);
}
for (RMNodeEvent nodeEvent : nodeEvents.values()) {
nodeEvent.setCounter(eventCounter++);
}
final RMInitialState rmInitialState = new RMInitialState();
rmInitialState.addAll(nodeEvents.values());
rmInitialState.addAll(nodeSourceEvents);
return rmInitialState;
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class NodeSource method removeNode.
/**
* Removes the node from the node source.
*
* @param nodeUrl the url of the node to be released
*/
public BooleanWrapper removeNode(String nodeUrl, Client initiator) {
// node could have fallen between remove request and the confirm
if (this.nodes.containsKey(nodeUrl)) {
logger.info("[" + name + "] removing node : " + nodeUrl);
Node node = nodes.remove(nodeUrl);
RMCore.topologyManager.removeNode(node);
try {
infrastructureManager.internalRemoveNode(node);
} catch (RMException e) {
logger.error(e.getCause().getMessage(), e);
}
} else {
Node downNode = downNodes.remove(nodeUrl);
if (downNode != null) {
logger.info("[" + name + "] removing down node : " + nodeUrl);
} else {
logger.error("[" + name + "] removing node : " + nodeUrl + " which not belongs to this node source");
return new BooleanWrapper(false);
}
}
if (this.toShutdown && this.nodes.size() == 0) {
this.shutdownNodeSourceServices(initiator);
}
return new BooleanWrapper(true);
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class NodeSource method setNodeAvailable.
public boolean setNodeAvailable(RMNode node) {
Node proactiveProgrammingNode = node.getNode();
String proactiveProgrammingNodeUrl = proactiveProgrammingNode.getNodeInformation().getURL();
Node downNode = downNodes.remove(proactiveProgrammingNodeUrl);
if (downNode != null) {
logger.info("Setting node as available: " + proactiveProgrammingNodeUrl);
nodes.put(proactiveProgrammingNodeUrl, proactiveProgrammingNode);
infrastructureManager.onDownNodeReconnection(proactiveProgrammingNode);
return true;
} else {
logger.info("Node state not changed since it is unknown: " + proactiveProgrammingNodeUrl);
return false;
}
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class NodeSource method detectedPingedDownNode.
/**
* Marks node as down. Remove it from node source node set. It remains in rmcore nodes list until
* user decides to remove them or node source is shutdown.
* @see NodeSource#detectedPingedDownNode(String, String)
*/
public void detectedPingedDownNode(String nodeName, String nodeUrl) {
if (toShutdown) {
logger.warn("[" + name + "] detectedPingedDownNode request discarded because node source is shutting down");
return;
}
logger.warn("[" + name + "] Detected down node: " + nodeUrl);
Node downNode = nodes.remove(nodeUrl);
if (downNode != null) {
downNodes.put(nodeUrl, downNode);
try {
RMCore.topologyManager.removeNode(downNode);
infrastructureManager.internalNotifyDownNode(nodeName, nodeUrl, downNode);
} catch (RMException e) {
logger.error("Error while removing down node: " + nodeUrl, e);
}
} else {
// almost no information about the node apart from its name and url
try {
infrastructureManager.internalNotifyDownNode(nodeName, nodeUrl, null);
} catch (RMException e) {
logger.error("New empty node " + nodeUrl + " could not be created to handle down node", e);
}
}
rmcore.setDownNode(nodeUrl);
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class RMNodeConfigurator method configureNode.
/**
* Configures the node.
* Every different configuration steps must be handled in this method.
* @param rmnodeToAdd the rmnode to be configured
*/
public void configureNode(RMNode rmnodeToAdd) {
String nodeURL = rmnodeToAdd.getNodeURL();
try {
Node nodeToAdd = rmnodeToAdd.getNode();
String dataSpaceStatus = nodeToAdd.getProperty(RMNodeStarter.DATASPACES_STATUS_PROP_NAME);
if (dataSpaceStatus == null) {
// no data space configured on the node
logger.debug("Configuring data spaces for node " + nodeToAdd.getNodeInformation().getURL());
configureForDataSpace(nodeToAdd);
} else if (!dataSpaceStatus.equals(Boolean.TRUE.toString())) {
// there was a problem of data space configuring
logger.error("Cannot configure data spaces : " + dataSpaceStatus);
} else {
// data space is configured
logger.debug("Data spaces is already configured for node " + nodeToAdd.getNodeInformation().getURL());
}
// setting node JMX connector urls
rmnodeToAdd.setJMXUrl(JMXTransportProtocol.RMI, nodeToAdd.getProperty(RMNodeStarter.JMX_URL + JMXTransportProtocol.RMI));
rmnodeToAdd.setJMXUrl(JMXTransportProtocol.RO, nodeToAdd.getProperty(RMNodeStarter.JMX_URL + JMXTransportProtocol.RO));
// blocking call involving running ping process on the node
if (PAResourceManagerProperties.RM_TOPOLOGY_ENABLED.getValueAsBoolean()) {
RMCore.topologyManager.addNode(nodeToAdd);
}
rmcore.internalAddNodeToCore(rmnodeToAdd);
} catch (Exception e) {
logger.warn("Cannot properly configure the node " + nodeURL + " because of an error during configuration phase", e);
// if a problem occurs during the configuration step,
// the node is set to down
rmcore.setDownNode(nodeURL);
}
}
Aggregations