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;
}
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());
}
}
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;
}
}
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);
}
}
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);
}
}
Aggregations