use of org.ow2.proactive.resourcemanager.common.event.RMNodeEvent in project scheduling by ow2-proactive.
the class RMCoreTest method createRmNodeEvent.
private RMNodeEvent createRmNodeEvent(NodeState previousNodeState) {
RMNodeDescriptor rmNodeDescriptor = new RMNodeDescriptor();
rmNodeDescriptor.setState(NodeState.DOWN);
return new RMNodeEvent(rmNodeDescriptor, RMEventType.NODE_STATE_CHANGED, previousNodeState, "initiator");
}
use of org.ow2.proactive.resourcemanager.common.event.RMNodeEvent 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.ow2.proactive.resourcemanager.common.event.RMNodeEvent in project scheduling by ow2-proactive.
the class InfrastructureManager method internalRemoveDeployingNode.
/**
* To remove a deploying node given its url
*
* @param pnUrl
* the url of the deploying node to remove.
* @return true if successful, false otherwise
*/
public final boolean internalRemoveDeployingNode(String pnUrl) {
RMDeployingNode pn = null;
boolean isLost = false;
writeLock.lock();
try {
pn = removeDeployingNodeWithLockAndPersist(pnUrl);
if (pn == null) {
pn = removeLostNodeWithLockAndPersist(pnUrl);
isLost = true;
}
} catch (RuntimeException e) {
logger.error("Exception while removing deploying node: " + e.getMessage());
throw e;
} finally {
writeLock.unlock();
}
// if such a deploying or lost node exists
if (pn != null) {
String url = pn.getNodeURL();
RMNodeEvent event = pn.createNodeEvent(RMEventType.NODE_REMOVED, pn.getState(), pn.getProvider().getName());
emitEvent(event);
logger.trace("DeployingNode " + url + " removed from IM");
// if the node is not lost
if (!isLost) {
this.notifyDeployingNodeLost(pn.getNodeURL());
}
return true;
} else {
logger.trace("DeployingNode: " + pnUrl + " no more managed by IM, cannot remove it");
return false;
}
}
use of org.ow2.proactive.resourcemanager.common.event.RMNodeEvent in project scheduling by ow2-proactive.
the class InfrastructureManager method internalRegisterAcquiredNode.
/**
* This method is called by the RMCore to notify the InfrastructureManager
* that a new node was added to the core. If the IM throws an exception, the
* node is not added. Note that this method is in mutual exclusion with
* {@link #checkNodeIsAcquiredAndDo(String, Runnable, Runnable)} At this
* point, if a previous call to
* {@link InfrastructureManager#addDeployingNode(String, String, String, long)}
* was made (means that implementor uses deploying nodes features), this
* method ensures that the implementation method (see
* {@link InfrastructureManager#notifyAcquiredNode(Node)} is only called if
* no timeout has occurred for the associated deploying node.
*
* @param node
* the newly added node
* @throws RMException
*/
public final RMDeployingNode internalRegisterAcquiredNode(Node node) throws RMException {
if (!isUsingDeployingNode()) {
this.notifyAcquiredNode(node);
return null;
}
// here we use deploying nodes and timeout
RMDeployingNode pn;
// we build the url of the associated deploying node
String deployingNodeURL = this.buildDeployingNodeURL(node.getNodeInformation().getName());
writeLock.lock();
try {
pn = removeDeployingNodeWithLockAndPersist(deployingNodeURL);
// implementation callback
if (pn != null) {
RMNodeEvent event = pn.createNodeEvent(RMEventType.NODE_REMOVED, pn.getState(), pn.getProvider().getName());
emitEvent(event);
this.notifyAcquiredNode(node);
// if everything went well with the new node, caching it
addAcquiredNodeNameWithLockAndPersist(node.getNodeInformation().getName());
} else {
String url = node.getNodeInformation().getURL();
logger.warn("Not expected node registered, discarding it: " + url);
throw new RMException("Not expected node registered, discarding it: " + url);
}
} catch (RuntimeException e) {
logger.error("Exception while moving deploying node to acquired node", e);
throw e;
} finally {
writeLock.unlock();
}
return pn;
}
use of org.ow2.proactive.resourcemanager.common.event.RMNodeEvent in project scheduling by ow2-proactive.
the class InfrastructureManager method declareDeployingNodeLost.
/**
* Declares a deploying node lost. Future attempts to modify the deploying
* node will be ignored.
*
* @param toUpdateURL
* The RMDeployingNode's URL which is to be declared as lost
* @param description
* the new rmdeployingnode's description, can be null.
* @return true if the method ran successfully, false otherwise.
*/
protected final boolean declareDeployingNodeLost(String toUpdateURL, String description) {
RMDeployingNode deployingNode;
// we need to atomically move the node from the deploying collection to
// the lost one.
writeLock.lock();
try {
deployingNode = removeDeployingNodeWithLockAndPersist(toUpdateURL);
if (deployingNode != null) {
addLostNodeWithLockAndPersist(toUpdateURL, deployingNode);
}
} catch (RuntimeException e) {
logger.error("Exception while moving a node from deploying to lost: " + e.getMessage());
throw e;
} finally {
writeLock.unlock();
}
if (deployingNode != null) {
logger.warn("Declaring node as lost: " + toUpdateURL + ", " + description);
NodeState previousState = deployingNode.getState();
RMDeployingNodeAccessor.getDefault().setLost(deployingNode);
if (description != null) {
RMDeployingNodeAccessor.getDefault().setDescription(deployingNode, description);
}
RMNodeEvent event = deployingNode.createNodeEvent(RMEventType.NODE_STATE_CHANGED, previousState, deployingNode.getProvider().getName());
emitEvent(event);
if (logger.isTraceEnabled()) {
logger.trace(RMDeployingNode.class.getSimpleName() + " " + toUpdateURL + " declared lost in IM");
}
return true;
} else {
if (logger.isTraceEnabled()) {
logger.trace(RMDeployingNode.class.getSimpleName() + " " + toUpdateURL + " no more managed by IM, cannot declare it as lost");
}
return false;
}
}
Aggregations