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