Search in sources :

Example 71 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.

the class RMCore method areNodesRecoverable.

@Override
public boolean areNodesRecoverable(NodeSet nodes) {
    Set<String> nodesURL = nodes.getAllNodesUrls();
    for (String nodeURL : nodesURL) {
        RMNode rmNode = allNodes.get(nodeURL);
        if (rmNode == null || !rmNode.getNodeSource().nodesRecoverable()) {
            logger.debug("RMNode corresponding to URL " + nodeURL + " is not recoverable");
            return false;
        }
    }
    logger.debug("All given nodes are recoverable");
    return true;
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode)

Example 72 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.

the class RMCore method persistNewRMNodeIfRecoveryEnabled.

/**
 * Add the information of the given node to the database.
 *
 * @param rmNode the node to add to the database
 */
private void persistNewRMNodeIfRecoveryEnabled(RMNode rmNode) {
    if (nodesRecoveryEnabledForNode(rmNode)) {
        RMNodeData rmNodeData = RMNodeData.createRMNodeData(rmNode);
        dbManager.addNode(rmNodeData, rmNode.getNodeSourceName());
    }
}
Also used : RMNodeData(org.ow2.proactive.resourcemanager.db.RMNodeData)

Example 73 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode 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;
    }
}
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)

Example 74 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode 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);
    }
}
Also used : RMNode(org.ow2.proactive.resourcemanager.rmnode.RMNode) Node(org.objectweb.proactive.core.node.Node) ActiveObjectCreationException(org.objectweb.proactive.ActiveObjectCreationException) NodeException(org.objectweb.proactive.core.node.NodeException)

Example 75 with RMNode

use of org.ow2.proactive.resourcemanager.rmnode.RMNode in project scheduling by ow2-proactive.

the class LocalInfrastructure method startNodeProcess.

private void startNodeProcess(int numberOfNodes) {
    int currentIndex = getIndexAndIncrement();
    String baseNodeName = "local-" + this.nodeSource.getName() + "-" + currentIndex;
    OperatingSystem os = OperatingSystem.UNIX;
    // assuming no cygwin, windows or the "others"...
    if (System.getProperty("os.name").contains("Windows")) {
        os = OperatingSystem.WINDOWS;
    }
    String rmHome = PAResourceManagerProperties.RM_HOME.getValueAsString();
    if (!rmHome.endsWith(os.fs)) {
        rmHome += os.fs;
    }
    CommandLineBuilder clb = this.getDefaultCommandLineBuilder(os);
    // RM_Home set in bin/unix/env script
    clb.setRmHome(rmHome);
    ArrayList<String> paPropList = new ArrayList<>();
    if (!this.paProperties.contains(CentralPAPropertyRepository.JAVA_SECURITY_POLICY.getName())) {
        paPropList.add(CentralPAPropertyRepository.JAVA_SECURITY_POLICY.getCmdLine() + rmHome + "config" + os.fs + "security.java.policy-client");
    }
    if (!this.paProperties.contains(CentralPAPropertyRepository.PA_CONFIGURATION_FILE.getName())) {
        paPropList.add(CentralPAPropertyRepository.PA_CONFIGURATION_FILE.getCmdLine() + rmHome + "config" + os.fs + "network" + os.fs + "node.ini");
    }
    if (!this.paProperties.contains(PAResourceManagerProperties.RM_HOME.getKey())) {
        paPropList.add(PAResourceManagerProperties.RM_HOME.getCmdLine() + rmHome);
    }
    if (!this.paProperties.contains("java.library.path")) {
        paPropList.add("-Djava.library.path=" + System.getProperty("java.library.path"));
    }
    if (!paProperties.isEmpty()) {
        Collections.addAll(paPropList, this.paProperties.split(" "));
    }
    clb.setPaProperties(paPropList);
    clb.setNodeName(baseNodeName);
    clb.setNumberOfNodes(numberOfNodes);
    try {
        clb.setCredentialsValueAndNullOthers(new String(this.credentials.getBase64()));
    } catch (KeyException e) {
        createLostNodes(baseNodeName, numberOfNodes, "Cannot decrypt credentials value", e);
        return;
    }
    List<String> cmd;
    try {
        cmd = clb.buildCommandLineAsList(false);
    } catch (IOException e) {
        createLostNodes(baseNodeName, numberOfNodes, "Cannot build command line", e);
        return;
    }
    // The printed cmd with obfuscated credentials
    final String obfuscatedCmd = Joiner.on(' ').join(cmd);
    List<String> depNodeURLs = new ArrayList<>(numberOfNodes);
    final List<String> createdNodeNames = RMNodeStarter.getWorkersNodeNames(baseNodeName, numberOfNodes);
    ProcessExecutor processExecutor = null;
    try {
        depNodeURLs.addAll(addMultipleDeployingNodes(createdNodeNames, obfuscatedCmd, "Node launched locally", this.nodeTimeout));
        // Deobfuscate the cred value
        Collections.replaceAll(cmd, CommandLineBuilder.OBFUSC, clb.getCredentialsValue());
        processExecutor = new ProcessExecutor(baseNodeName, cmd, false, true);
        processExecutor.start();
        processExecutors.put(processExecutor, depNodeURLs);
        final ProcessExecutor tmpProcessExecutor = processExecutor;
        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {

            @Override
            public void run() {
                if (tmpProcessExecutor != null && !tmpProcessExecutor.isProcessFinished()) {
                    tmpProcessExecutor.killProcess();
                }
            }
        }));
        logger.info("Local Nodes command started : " + obfuscatedCmd);
    } catch (IOException e) {
        String lf = System.lineSeparator();
        String mess = "Cannot launch rm node " + baseNodeName + lf + Throwables.getStackTraceAsString(e);
        multipleDeclareDeployingNodeLost(depNodeURLs, mess);
        if (processExecutor != null) {
            cleanProcess(processExecutor);
        }
        return;
    }
    // watching process
    int threshold = 10;
    while (!allNodesAcquiredOrLost()) {
        if (processExecutor.isProcessFinished()) {
            int exit = processExecutor.getExitCode();
            if (exit != 0) {
                String lf = System.lineSeparator();
                String message = "RMNode exit code == " + exit + lf;
                message += "Command: " + obfuscatedCmd + lf;
                String out = Joiner.on('\n').join(processExecutor.getOutput());
                String err = Joiner.on('\n').join(processExecutor.getErrorOutput());
                message += "stdout: " + out + lf + "stderr: " + err;
                multipleDeclareDeployingNodeLost(depNodeURLs, message);
            }
        } else {
            logger.debug("Waiting for nodes " + baseNodeName + " acquisition");
        }
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            logger.warn("Interrupted while waiting for local process status", e);
            threshold--;
            if (threshold <= 0) {
                break;
            }
        }
    }
    logger.debug("Local Infrastructure manager exits watching loop for nodes " + baseNodeName);
    logNodeOutput(baseNodeName + " stdout: ", processExecutor.getOutput());
    logNodeOutput(baseNodeName + " stderr: ", processExecutor.getErrorOutput());
    if (allNodesLost(numberOfNodes)) {
        // clean up the process
        cleanProcess(processExecutor);
    }
}
Also used : OperatingSystem(org.ow2.proactive.resourcemanager.utils.OperatingSystem) ArrayList(java.util.ArrayList) CommandLineBuilder(org.ow2.proactive.resourcemanager.utils.CommandLineBuilder) IOException(java.io.IOException) ProcessExecutor(org.ow2.proactive.process.ProcessExecutor) KeyException(java.security.KeyException)

Aggregations

RMNode (org.ow2.proactive.resourcemanager.rmnode.RMNode)55 Test (org.junit.Test)27 Node (org.objectweb.proactive.core.node.Node)12 BooleanWrapper (org.objectweb.proactive.core.util.wrapper.BooleanWrapper)12 Client (org.ow2.proactive.resourcemanager.authentication.Client)12 SelectionScript (org.ow2.proactive.scripting.SelectionScript)12 ArrayList (java.util.ArrayList)11 RMDeployingNode (org.ow2.proactive.resourcemanager.rmnode.RMDeployingNode)11 LinkedList (java.util.LinkedList)10 RMNodeImpl (org.ow2.proactive.resourcemanager.rmnode.RMNodeImpl)10 SelectionManager (org.ow2.proactive.resourcemanager.selection.SelectionManager)8 NodeState (org.ow2.proactive.resourcemanager.common.NodeState)7 NodeSource (org.ow2.proactive.resourcemanager.nodesource.NodeSource)7 Permission (java.security.Permission)6 SelectionManagerTest (org.ow2.proactive.resourcemanager.selection.SelectionManagerTest)6 NodeSet (org.ow2.proactive.utils.NodeSet)6 HashMap (java.util.HashMap)5 HashSet (java.util.HashSet)5 MutableInteger (org.objectweb.proactive.core.util.MutableInteger)5 PrincipalPermission (org.ow2.proactive.permissions.PrincipalPermission)5