use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class TestLocalInfrastructureRestartDownNodesPolicy method testRestartDownNodesPolicy.
@Test
public void testRestartDownNodesPolicy() throws Exception {
nodeSourceName = "Node_source_1";
RMTHelper.log("Test 1 - restart down nodes policy");
createNodeSourceWithNodes(nodeSourceName, new Object[] { "ALL", "ALL", "10000" });
RMState stateTest1 = resourceManager.getState();
assertEquals(defaultDescriptorNodesNb, stateTest1.getTotalNodesNumber());
assertEquals(defaultDescriptorNodesNb, stateTest1.getFreeNodesNumber());
NodeSet ns = resourceManager.getNodes(new Criteria(defaultDescriptorNodesNb));
for (Node n : ns) {
rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, n.getNodeInformation().getURL());
}
String nodeUrl = ns.get(0).getNodeInformation().getURL();
// Nodes will be redeployed only if we kill the whole runtime
rmHelper.killRuntime(nodeUrl);
RMNodeEvent ev = rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, nodeUrl);
assertEquals(NodeState.DOWN, ev.getNodeState());
// one node is down - the policy should detect it and redeploy
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
assertEquals(defaultDescriptorNodesNb, stateTest1.getTotalNodesNumber());
assertEquals(defaultDescriptorNodesNb, stateTest1.getTotalAliveNodesNumber());
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class TestLocalInfrastructureStaticPolicy method action.
@Test
public void action() throws Exception {
String source1 = "Node_source_1";
ResourceManager resourceManager = rmHelper.getResourceManager();
log("Test 1 - creation/removal of empty node source");
log("creation");
createEmptyNodeSource(source1);
log("removal");
resourceManager.removeNodeSource(source1, true);
log("ask to remove NS");
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, source1);
log("NS removed");
String source2 = "Node_source_2";
log("Test 2 - creation/removal of the node source with nodes");
createNodeSourceWithNodes(source1);
RMState s = resourceManager.getState();
assertEquals(defaultDescriptorNodesNb, s.getTotalNodesNumber());
assertEquals(defaultDescriptorNodesNb, s.getFreeNodesNumber());
// releasing some nodes
NodeSet ns = resourceManager.getAtMostNodes(defaultDescriptorNodesNb, null);
for (Node n : ns) {
// eat the freeToBusy event
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
resourceManager.removeNode(n.getNodeInformation().getURL(), true);
rmHelper.waitForNodeEvent(RMEventType.NODE_REMOVED, n.getNodeInformation().getURL());
}
assertEquals(0, resourceManager.getState().getTotalNodesNumber());
assertEquals(0, resourceManager.getState().getFreeNodesNumber());
log("removal");
resourceManager.removeNodeSource(source1, true);
log("ask to remove NS");
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, source1);
log("NS removed");
log("Test 3 - several node sources");
createNodeSourceWithNodes(source1);
createNodeSourceWithNodes(source2);
assertEquals(2 * defaultDescriptorNodesNb, resourceManager.getState().getTotalNodesNumber());
assertEquals(2 * defaultDescriptorNodesNb, resourceManager.getState().getFreeNodesNumber());
resourceManager.removeNodeSource(source1, true);
// wait the n events of the n nodes removals of the node source
for (int i = 0; i < defaultDescriptorNodesNb; i++) {
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
}
// wait for the event of the node source removal
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, source1);
resourceManager.removeNodeSource(source2, true);
for (int i = 0; i < defaultDescriptorNodesNb; i++) {
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
}
// wait for the event of the node source removal
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, source2);
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class TestAddRemoveAll method testCreateNodeSource.
@Test
public void testCreateNodeSource() throws Exception {
ResourceManager resourceManager = rmHelper.getResourceManager();
int pingFrequency = 6000;
log("Add/RemoveAll");
resourceManager.createNodeSource(nsName, DefaultInfrastructureManager.class.getName(), null, StaticPolicy.class.getName(), null, NODES_NOT_RECOVERABLE);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_CREATED, nsName);
resourceManager.setNodeSourcePingFrequency(pingFrequency, nsName);
testNode = rmHelper.createNode(nodeName);
Node nodeToAdd = testNode.getNode();
resourceManager.addNode(nodeToAdd.getNodeInformation().getURL(), nsName).getBooleanValue();
// at this time, nodes maybe fully added in the nodesource but not in the core
// the next removal may fail for some nodes that are not known by the core...
resourceManager.removeNodeSource(nsName, true);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
Thread.sleep(pingFrequency * 2);
if (resourceManager.getState().getTotalNodesNumber() != 0) {
log("The removeAll method in RMCore didn't removed all nodes");
fail();
} else {
log("The removeAll method in RMCore did its job well");
}
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class TestNodesStates method testManyStatesChanges.
@Test
public void testManyStatesChanges() throws Exception {
ResourceManager resourceManager = rmHelper.getResourceManager();
int totalNodeNumber = 5;
rmHelper.createNodeSource("TestNodesStates", totalNodeNumber);
// ----------------------------------------------------------
// Book all nodes deployed by descriptor (user action)
// verify that there are no free nodes left,
// and give back to RM
log("Test 1");
NodeSet nodes = resourceManager.getAtMostNodes(totalNodeNumber, null);
PAFuture.waitFor(nodes);
assertEquals(totalNodeNumber, nodes.size());
assertEquals(0, resourceManager.getState().getFreeNodesNumber());
for (int i = 0; i < totalNodeNumber; i++) {
RMNodeEvent evt = rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, nodes.get(i).getNodeInformation().getURL());
assertEquals(NodeState.BUSY, evt.getNodeState());
checkEvent(evt, nodes.get(i));
}
// for next test
Node n = nodes.get(0);
resourceManager.releaseNodes(nodes);
for (int i = 0; i < totalNodeNumber; i++) {
RMNodeEvent evt = rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, nodes.get(i).getNodeInformation().getURL());
assertEquals(NodeState.FREE, evt.getNodeState());
checkEvent(evt, nodes.get(i));
}
// ----------------------------------------------------------
// give back a node already given back (i.e; node already free)
// this action causes nothing(nor increasing free nodes number, nor generation of any event)
log("Test 2");
resourceManager.releaseNode(n);
boolean timeouted = false;
try {
rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, n.getNodeInformation().getURL(), 4000);
} catch (ProActiveTimeoutException e) {
timeouted = true;
}
assertTrue(timeouted);
assertEquals(totalNodeNumber, resourceManager.getState().getFreeNodesNumber());
// ----------------------------------------------------------
// Book all nodes deployed by descriptor
// Test admin action : Remove a node from the RM (non preemptively),
// node is busy, so becomes in "toRelease" state
// user give back to RM the "toRelease" node, node is now removed
log("Test 3");
nodes = resourceManager.getAtMostNodes(totalNodeNumber, null);
PAFuture.waitFor(nodes);
for (int i = 0; i < totalNodeNumber; i++) {
RMNodeEvent evt = rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
assertEquals(NodeState.BUSY, evt.getNodeState());
}
n = nodes.remove(0);
// put node in "To Release" state
resourceManager.removeNode(n.getNodeInformation().getURL(), false);
// check that node toRelease event has been thrown
RMNodeEvent evt = rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, n.getNodeInformation().getURL());
assertEquals(NodeState.TO_BE_REMOVED, evt.getNodeState());
// node is in "ToRelease" state, so always handled by RM
assertEquals(totalNodeNumber, resourceManager.getState().getTotalNodesNumber());
// user give back the node, so node is now removed
resourceManager.releaseNode(n);
assertEquals(totalNodeNumber - 1, resourceManager.getState().getTotalNodesNumber());
assertEquals(0, resourceManager.getState().getFreeNodesNumber());
rmHelper.waitForNodeEvent(RMEventType.NODE_REMOVED, n.getNodeInformation().getURL());
// ----------------------------------------------------------
// nodes are always in busy state
// kill JVM of a node (simulate a fallen JVM or broken connection, i.e down node)
// node must detected down by RM
log("Test 4");
n = nodes.get(0);
// for next test
Node n2 = nodes.get(1);
try {
n.getProActiveRuntime().killNode(n.getNodeInformation().getName());
} catch (Exception e) {
e.printStackTrace();
}
evt = rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, n.getNodeInformation().getURL());
assertEquals(NodeState.DOWN, evt.getNodeState());
checkEvent(evt, n);
resourceManager.releaseNodes(nodes);
for (int i = 0; i < totalNodeNumber - 2; i++) {
evt = rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
assertEquals(NodeState.FREE, evt.getNodeState());
}
// two nodes killed, but the detected down is in RM down nodes list
// ( down nodes are in total nodes count)
assertEquals(totalNodeNumber - 1, resourceManager.getState().getTotalNodesNumber());
assertEquals(totalNodeNumber - 2, resourceManager.getState().getFreeNodesNumber());
// ----------------------------------------------------------
// nodes left are in free state
// kill JVM of a free node
// node must detected down by RM
log("Test 5");
try {
n2.getProActiveRuntime().killNode(n2.getNodeInformation().getName());
} catch (Exception e) {
e.printStackTrace();
}
evt = rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, n2.getNodeInformation().getURL());
assertEquals(NodeState.DOWN, evt.getNodeState());
assertEquals(totalNodeNumber - 1, resourceManager.getState().getTotalNodesNumber());
assertEquals(totalNodeNumber - 3, resourceManager.getState().getFreeNodesNumber());
// ----------------------------------------------------------
// book nodes, put one node in "toRelease" state,
// then kill its JVM,
// node must detected down by RM
log("Test 6");
nodes = resourceManager.getAtMostNodes(totalNodeNumber - 3, null);
PAFuture.waitFor(nodes);
for (int i = 0; i < totalNodeNumber - 3; i++) {
evt = rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
assertEquals(NodeState.BUSY, evt.getNodeState());
}
n = nodes.get(0);
// for next test
n2 = nodes.get(1);
// put node in "To Release" state
resourceManager.removeNode(n.getNodeInformation().getURL(), false);
evt = rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, n.getNodeInformation().getURL());
assertEquals(NodeState.TO_BE_REMOVED, evt.getNodeState());
log("Test 6 Bis");
// kill the node
try {
n.getProActiveRuntime().killNode(n.getNodeInformation().getName());
} catch (Exception e) {
e.printStackTrace();
}
evt = rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, n.getNodeInformation().getURL());
assertEquals(NodeState.DOWN, evt.getNodeState());
assertEquals(totalNodeNumber - 1, resourceManager.getState().getTotalNodesNumber());
assertEquals(0, resourceManager.getState().getFreeNodesNumber());
for (Node node : nodes) {
log("Taken node: " + node.getNodeInformation().getURL());
}
// we have 2 nodes: 11 busy and one still down
resourceManager.releaseNodes(nodes);
for (int i = 0; i < 1; i++) {
evt = rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
assertEquals(NodeState.FREE, evt.getNodeState());
}
assertEquals(totalNodeNumber - 1, resourceManager.getState().getTotalNodesNumber());
assertEquals(totalNodeNumber - 4, resourceManager.getState().getFreeNodesNumber());
// admin removes again the node, ok he already asked this removal when node n was busy
// choice here is advert admin that node has fallen (not hiding the down node event),
// rather than automatically remove it
resourceManager.removeNode(n.getNodeInformation().getURL(), false);
// check that node removed event has been received
rmHelper.waitForNodeEvent(RMEventType.NODE_REMOVED, n.getNodeInformation().getURL());
assertEquals(totalNodeNumber - 2, resourceManager.getState().getTotalNodesNumber());
assertEquals(totalNodeNumber - 4, resourceManager.getState().getFreeNodesNumber());
// ----------------------------------------------------------
// Remove a free node,
//
log("Test 7");
resourceManager.removeNode(n2.getNodeInformation().getURL(), false);
// check that node removed event has been received
rmHelper.waitForNodeEvent(RMEventType.NODE_REMOVED, n2.getNodeInformation().getURL());
assertEquals(totalNodeNumber - 3, resourceManager.getState().getTotalNodesNumber());
assertEquals(totalNodeNumber - 5, resourceManager.getState().getFreeNodesNumber());
log("End of test");
}
use of org.objectweb.proactive.core.node.Node in project scheduling by ow2-proactive.
the class TestNSAdminPermissions method action.
@Test
public void action() throws Exception {
String nsName = "TestNSAdminPermissions";
ResourceManager adminRMAccess = rmHelper.getResourceManager(TestUsers.ADMIN);
RMTHelper.log("Test1 - node source removal");
adminRMAccess.createNodeSource(nsName, DefaultInfrastructureManager.class.getName(), null, StaticPolicy.class.getName(), new Object[] { "ALL", "ME" }, NODES_NOT_RECOVERABLE);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_CREATED, nsName);
// user does not have an access to change the node source
ResourceManager userRMAccess = rmHelper.getResourceManager(TestUsers.RADMIN);
try {
userRMAccess.removeNodeSource(nsName, true).getBooleanValue();
fail();
} catch (Exception e) {
}
// admin and provider are in "nsadmins" group
ResourceManager providerRMAccess = rmHelper.getResourceManager(TestUsers.NSADMIN);
try {
providerRMAccess.removeNodeSource(nsName, true).getBooleanValue();
fail();
} catch (Exception e) {
}
adminRMAccess = rmHelper.getResourceManager(TestUsers.ADMIN);
adminRMAccess.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test2 - ns admin can remove foreign nodes");
userRMAccess = rmHelper.getResourceManager(TestUsers.RADMIN);
userRMAccess.createNodeSource(nsName, DefaultInfrastructureManager.class.getName(), null, StaticPolicy.class.getName(), new Object[] { "PROVIDER", "ALL" }, NODES_NOT_RECOVERABLE);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_CREATED, nsName);
providerRMAccess = rmHelper.getResourceManager(TestUsers.NSADMIN);
TestNode testNode1 = rmHelper.createNode("node1");
testNodes.add(testNode1);
Node node = testNode1.getNode();
// adding the node as provider
providerRMAccess.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
// node becomes free
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
userRMAccess = rmHelper.getResourceManager(TestUsers.RADMIN);
// this is an administrator of the node source, so it can remove the foreign node
userRMAccess.removeNode(node.getNodeInformation().getURL(), true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
RMTHelper.log("Test3 - ns admin cannot get the foreign node");
providerRMAccess = rmHelper.getResourceManager(TestUsers.NSADMIN);
TestNode testNode2 = rmHelper.createNode("node2");
testNodes.add(testNode2);
Node node2 = testNode2.getNode();
// adding the node as provider
providerRMAccess.addNode(node2.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
// node becomes free
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
userRMAccess = rmHelper.getResourceManager(TestUsers.RADMIN);
// this is an administrator of the node source, so it can remove the foreign node
NodeSet nodes = userRMAccess.getAtMostNodes(1, null);
Assert.assertEquals("NS admin cannot get nodes as the get level is set to PROVIDER", 0, nodes.size());
RMTHelper.log("Test4 - user with AllPermisssion can remove any node sources");
adminRMAccess = rmHelper.getResourceManager(TestUsers.ADMIN);
adminRMAccess.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Success");
}
Aggregations