Search in sources :

Example 41 with RMNodeEvent

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(), e);
        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());
        emitNodeEvent(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;
    }
}
Also used : NodeState(org.ow2.proactive.resourcemanager.common.NodeState) RMDeployingNode(org.ow2.proactive.resourcemanager.rmnode.RMDeployingNode) RMNodeEvent(org.ow2.proactive.resourcemanager.common.event.RMNodeEvent)

Example 42 with RMNodeEvent

use of org.ow2.proactive.resourcemanager.common.event.RMNodeEvent in project scheduling by ow2-proactive.

the class InfrastructureManager method emitNodeEvent.

// **********************************************************************************************//
// *********************** Package private accessors & Helpers
// **********************************//
// **********************************************************************************************//
/**
 * To emit a node event and register it in the database
 */
private void emitNodeEvent(final RMNodeEvent event) {
    NodeSource nsStub = this.nodeSource.getStub();
    nsStub.internalEmitDeployingNodeEvent(event);
}
Also used : NodeSource(org.ow2.proactive.resourcemanager.nodesource.NodeSource)

Example 43 with RMNodeEvent

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());
            emitNodeEvent(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;
}
Also used : RMDeployingNode(org.ow2.proactive.resourcemanager.rmnode.RMDeployingNode) RMNodeEvent(org.ow2.proactive.resourcemanager.common.event.RMNodeEvent) RMException(org.ow2.proactive.resourcemanager.exception.RMException)

Example 44 with RMNodeEvent

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(), e);
        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());
        emitNodeEvent(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;
    }
}
Also used : RMDeployingNode(org.ow2.proactive.resourcemanager.rmnode.RMDeployingNode) RMNodeEvent(org.ow2.proactive.resourcemanager.common.event.RMNodeEvent)

Aggregations

RMNodeEvent (org.ow2.proactive.resourcemanager.common.event.RMNodeEvent)39 Test (org.junit.Test)24 RMFunctionalTest (functionaltests.utils.RMFunctionalTest)19 NodeSet (org.ow2.proactive.utils.NodeSet)16 File (java.io.File)15 ResourceManager (org.ow2.proactive.resourcemanager.frontend.ResourceManager)15 TestNode (functionaltests.utils.TestNode)8 HashMap (java.util.HashMap)8 NodeState (org.ow2.proactive.resourcemanager.common.NodeState)8 Node (org.objectweb.proactive.core.node.Node)7 SelectionScript (org.ow2.proactive.scripting.SelectionScript)7 RMNodeSourceEvent (org.ow2.proactive.resourcemanager.common.event.RMNodeSourceEvent)6 StaticPolicy (org.ow2.proactive.resourcemanager.nodesource.policy.StaticPolicy)6 RMDeployingNode (org.ow2.proactive.resourcemanager.rmnode.RMDeployingNode)6 Criteria (org.ow2.proactive.utils.Criteria)6 RMMonitorEventReceiver (functionaltests.monitor.RMMonitorEventReceiver)5 RMTHelper (functionaltests.utils.RMTHelper)5 HashSet (java.util.HashSet)5 BooleanWrapper (org.objectweb.proactive.core.util.wrapper.BooleanWrapper)5 ArrayList (java.util.ArrayList)4