Search in sources :

Example 1 with Policy

use of org.ow2.proactive.scheduler.policy.Policy in project scheduling by ow2-proactive.

the class RMCore method configureDeployedNodeSource.

private void configureDeployedNodeSource(String nodeSourceName, NodeSourceDescriptor nodeSourceDescriptor, NodeSource nodeSourceStub, NodeSourcePolicy nodeSourcePolicyStub) {
    // Adding access to the core for node source and policy.
    // In order to do it node source and policy active objects are added to the clients list.
    // They will be removed from this list when node source is unregistered.
    UniqueID nsId = Client.getId(nodeSourceStub);
    UniqueID policyId = Client.getId(nodeSourcePolicyStub);
    if (nsId == null || policyId == null) {
        throw new IllegalStateException("Cannot register the node source");
    }
    BooleanWrapper result = nodeSourceStub.activate();
    if (!result.getBooleanValue()) {
        logger.error(NODE_SOURCE_STRING + nodeSourceName + " cannot be activated");
    }
    Client provider = nodeSourceDescriptor.getProvider();
    Client nsService = new Client(provider.getSubject(), false);
    Client policyService = new Client(provider.getSubject(), false);
    nsService.setId(nsId);
    policyService.setId(policyId);
    RMCore.clients.put(nsId, nsService);
    RMCore.clients.put(policyId, policyService);
}
Also used : UniqueID(org.objectweb.proactive.core.UniqueID) BooleanWrapper(org.objectweb.proactive.core.util.wrapper.BooleanWrapper) Client(org.ow2.proactive.resourcemanager.authentication.Client)

Example 2 with Policy

use of org.ow2.proactive.scheduler.policy.Policy in project scheduling by ow2-proactive.

the class RMCore method initActivity.

/**
 * Initialization part of the RMCore active object.
 * Create RM's active objects and the default static Node Source named
 * {@link RMConstants#DEFAULT_STATIC_SOURCE_NAME}. Finally, it throws the RM
 * started event.
 *
 * @param body the active object's body.
 */
public void initActivity(Body body) {
    if (logger.isDebugEnabled()) {
        logger.debug("RMCore start : initActivity");
    }
    try {
        // setting up the policy
        logger.debug("Setting up the resource manager security policy");
        ClientsPolicy.init();
        StubObject rmCoreStub = PAActiveObject.getStubOnThis();
        PAActiveObject.registerByName(rmCoreStub, RMConstants.NAME_ACTIVE_OBJECT_RMCORE);
        dbManager = RMDBManager.getInstance();
        if (logger.isDebugEnabled()) {
            logger.debug("Creating RMAuthentication active object");
        }
        authentication = (RMAuthenticationImpl) PAActiveObject.newActive(RMAuthenticationImpl.class.getName(), new Object[] { rmCoreStub }, nodeRM);
        if (logger.isDebugEnabled()) {
            logger.debug("Creating RMMonitoring active object");
        }
        // Boot the JMX infrastructure
        this.jmxHelper.boot(authentication);
        monitoring = (RMMonitoringImpl) PAActiveObject.newActive(RMMonitoringImpl.class.getName(), new Object[] { rmCoreStub }, nodeRM);
        if (logger.isDebugEnabled()) {
            logger.debug("Creating SelectionManager active object");
        }
        selectionManager = (SelectionManager) PAActiveObject.newActive(ProbablisticSelectionManager.class.getName(), new Object[] { rmCoreStub }, nodeRM);
        if (logger.isDebugEnabled()) {
            logger.debug("Creating ClientPinger active object");
        }
        clientPinger = (ClientPinger) PAActiveObject.newActive(ClientPinger.class.getName(), new Object[] { rmCoreStub }, nodeRM);
        if (logger.isDebugEnabled()) {
            logger.debug("Creating NodeCleaner active object");
        }
        nodesCleaner = (NodesCleaner) PAActiveObject.newActive(NodesCleaner.class.getName(), new Object[] { rmCoreStub }, nodeRM);
        topologyManager = new TopologyManager();
        nodeConfigurator = (RMNodeConfigurator) PAActiveObject.newActive(RMNodeConfigurator.class.getName(), new Object[] { rmCoreStub }, nodeRM);
        // adding shutdown hook
        final RMCore rmcoreStub = (RMCore) rmCoreStub;
        Runtime.getRuntime().addShutdownHook(new Thread() {

            @Override
            public void run() {
                if (!toShutDown) {
                    rmcoreStub.shutdown(true);
                }
                synchronized (nodeRM) {
                    if (!shutedDown) {
                        try {
                            // wait for rmcore shutdown (5 min at most)
                            nodeRM.wait(5 * 60 * 60 * 1000);
                        } catch (InterruptedException e) {
                            logger.warn("shutdown hook interrupted", e);
                        }
                    }
                }
            }
        });
        // Creating RM started event
        this.monitoring.rmEvent(new RMEvent(RMEventType.STARTED));
        authentication.setActivated(true);
        clientPinger.ping();
        initiateRecoveryIfRequired();
    } catch (ActiveObjectCreationException e) {
        logger.error("", e);
    } catch (NodeException e) {
        logger.error("", e);
    } catch (ProActiveException e) {
        logger.error("", e);
    } catch (ClassNotFoundException e) {
        logger.error("", e);
    } finally {
        signalRMCoreIsInitialized();
    }
    if (logger.isDebugEnabled()) {
        logger.debug("RMCore end: initActivity");
    }
}
Also used : ProbablisticSelectionManager(org.ow2.proactive.resourcemanager.selection.statistics.ProbablisticSelectionManager) ClientPinger(org.ow2.proactive.resourcemanager.utils.ClientPinger) RMMonitoringImpl(org.ow2.proactive.resourcemanager.frontend.RMMonitoringImpl) NodeException(org.objectweb.proactive.core.node.NodeException) ProActiveException(org.objectweb.proactive.core.ProActiveException) RMAuthenticationImpl(org.ow2.proactive.resourcemanager.authentication.RMAuthenticationImpl) StubObject(org.objectweb.proactive.core.mop.StubObject) ActiveObjectCreationException(org.objectweb.proactive.ActiveObjectCreationException) NodesCleaner(org.ow2.proactive.resourcemanager.cleaning.NodesCleaner) TopologyManager(org.ow2.proactive.resourcemanager.selection.topology.TopologyManager) RMEvent(org.ow2.proactive.resourcemanager.common.event.RMEvent) RMNodeConfigurator(org.ow2.proactive.resourcemanager.nodesource.RMNodeConfigurator)

Example 3 with Policy

use of org.ow2.proactive.scheduler.policy.Policy in project scheduling by ow2-proactive.

the class NodeSource method runActivity.

public void runActivity(Body body) {
    Service service = new Service(body);
    long timeStamp = System.currentTimeMillis();
    long delta = 0;
    // recalculating nodes number only once per policy period
    while (body.isActive()) {
        try {
            service.blockingServeOldest(pingFrequency);
            delta += System.currentTimeMillis() - timeStamp;
            timeStamp = System.currentTimeMillis();
            if (delta > pingFrequency) {
                logger.info("[" + name + "] Pinging alive nodes : " + getAliveNodes().size());
                for (Node node : getAliveNodes()) {
                    pingNode(node);
                }
                delta = 0;
            }
        } catch (InterruptedException e) {
            logger.warn("runActivity interrupted", e);
        }
    }
}
Also used : RMDeployingNode(org.ow2.proactive.resourcemanager.rmnode.RMDeployingNode) RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) Node(org.objectweb.proactive.core.node.Node) AbstractRMNode(org.ow2.proactive.resourcemanager.rmnode.AbstractRMNode) Service(org.objectweb.proactive.Service) ImmediateService(org.objectweb.proactive.annotation.ImmediateService)

Example 4 with Policy

use of org.ow2.proactive.scheduler.policy.Policy in project scheduling by ow2-proactive.

the class RestartDownNodesPolicy method activate.

/**
 * Activates static policy. Register a listener in RMMonitoring
 */
@Override
public BooleanWrapper activate() {
    acquireAllNodes();
    timer.schedule(new TimerTask() {

        @Override
        public void run() {
            int numberOfNodesToDeploy = 0;
            for (Node downNode : nodeSource.getDownNodes()) {
                String nodeUrl = downNode.getNodeInformation().getURL();
                logger.info("Removing down node " + nodeUrl);
                BooleanWrapper removed = nodeSource.getRMCore().removeNode(nodeUrl, true);
                if (removed.getBooleanValue()) {
                    logger.info("Down node removed " + nodeUrl);
                    numberOfNodesToDeploy++;
                }
            }
            for (RMDeployingNode lostNode : nodeSource.getDeployingAndLostNodes()) {
                if (!lostNode.isLost()) {
                    continue;
                }
                String nodeUrl = lostNode.getNodeURL();
                logger.info("Removing lost node " + nodeUrl);
                BooleanWrapper removed = nodeSource.getRMCore().removeNode(nodeUrl, true);
                if (removed.getBooleanValue()) {
                    logger.info("Lost node removed " + nodeUrl);
                    numberOfNodesToDeploy++;
                }
            }
            if (numberOfNodesToDeploy > 0) {
                logger.info("Acquiring " + numberOfNodesToDeploy + " nodes");
                acquireNodes(numberOfNodesToDeploy);
            }
        }
    }, checkNodeStateEach, checkNodeStateEach);
    return new BooleanWrapper(true);
}
Also used : BooleanWrapper(org.objectweb.proactive.core.util.wrapper.BooleanWrapper) TimerTask(java.util.TimerTask) RMDeployingNode(org.ow2.proactive.resourcemanager.rmnode.RMDeployingNode) Node(org.objectweb.proactive.core.node.Node) RMDeployingNode(org.ow2.proactive.resourcemanager.rmnode.RMDeployingNode)

Example 5 with Policy

use of org.ow2.proactive.scheduler.policy.Policy in project scheduling by ow2-proactive.

the class NodeSourcePriorityPolicy method arrangeNodes.

/**
 * Sort by node source priorities.
 *
 * @return the list arranged according to the node source priorities
 */
public List<RMNode> arrangeNodes(int number, List<RMNode> nodes, Client client) {
    if (nodeSources == null) {
        logger.error("The policy config was not loaded");
        return nodes;
    }
    if (nodeSources.size() == 0) {
        logger.debug("The policy config is empty");
        return nodes;
    }
    reloadConfig();
    logger.debug("Arranging nodes according to node sources priorities");
    HashMap<String, List<RMNode>> nodesMap = new HashMap<>();
    for (RMNode node : nodes) {
        if (!nodesMap.containsKey(node.getNodeSourceName())) {
            nodesMap.put(node.getNodeSourceName(), new LinkedList<RMNode>());
        }
        nodesMap.get(node.getNodeSourceName()).add(node);
    }
    List<RMNode> arranged = new LinkedList<>();
    for (String ns : nodeSources) {
        if (nodesMap.containsKey(ns)) {
            logger.debug("Adding " + nodesMap.get(ns).size() + " nodes from " + ns);
            arranged.addAll(nodesMap.get(ns));
            nodesMap.remove(ns);
            if (arranged.size() >= number) {
                break;
            }
        }
    }
    for (String ns : nodesMap.keySet()) {
        logger.debug("Adding nodes from " + ns);
        arranged.addAll(nodesMap.get(ns));
    }
    return arranged;
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) HashMap(java.util.HashMap) List(java.util.List) LinkedList(java.util.LinkedList) LinkedList(java.util.LinkedList)

Aggregations

Node (org.objectweb.proactive.core.node.Node)7 Test (org.junit.Test)6 NodeSet (org.ow2.proactive.utils.NodeSet)5 RMFunctionalTest (functionaltests.utils.RMFunctionalTest)4 KeyException (java.security.KeyException)4 LinkedList (java.util.LinkedList)4 List (java.util.List)4 ActiveObjectCreationException (org.objectweb.proactive.ActiveObjectCreationException)4 RMState (org.ow2.proactive.resourcemanager.common.RMState)4 RMException (org.ow2.proactive.resourcemanager.exception.RMException)4 RMNode (org.ow2.proactive.resourcemanager.rmnode.RMNode)4 HttpResponseWrapper (org.ow2.proactive_grid_cloud_portal.cli.utils.HttpResponseWrapper)4 IOException (java.io.IOException)3 ArrayList (java.util.ArrayList)3 SchedulerAuthenticationInterface (org.ow2.proactive.scheduler.common.SchedulerAuthenticationInterface)3 Throwables.getStackTraceAsString (com.google.common.base.Throwables.getStackTraceAsString)2 File (java.io.File)2 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)2 LoginException (javax.security.auth.login.LoginException)2 UniqueID (org.objectweb.proactive.core.UniqueID)2