use of org.btrplace.plan.event.Event in project scheduler by btrplace.
the class ActionTest method testEvents.
@Test
public void testEvents() {
Action a1 = new MockAction(new VM(1), 1, 3);
Event e = mock(Event.class);
Assert.assertTrue(a1.addEvent(Action.Hook.PRE, e));
Assert.assertFalse(a1.addEvent(Action.Hook.PRE, e));
Assert.assertEquals(1, a1.getEvents(Action.Hook.PRE).size());
a1.addEvent(Action.Hook.POST, e);
Assert.assertEquals(1, a1.getEvents(Action.Hook.POST).size());
Event e2 = mock(Event.class);
a1.addEvent(Action.Hook.POST, e2);
Assert.assertEquals(2, a1.getEvents(Action.Hook.POST).size());
String str = a1.toString();
// Check for issue #203. Only one occurrence of the event is reported.
Assert.assertEquals(str.indexOf(String.valueOf(e2.hashCode())), str.lastIndexOf(String.valueOf(e2.hashCode())));
}
use of org.btrplace.plan.event.Event in project scheduler by btrplace.
the class ActionTest method testApply.
@Test
public void testApply() {
Model mo = new DefaultModel();
MockAction a1 = new MockAction(new VM(1), 1, 3);
Event e = mock(Event.class);
when(e.apply(mo)).thenReturn(true);
a1.addEvent(Action.Hook.PRE, e);
a1.addEvent(Action.Hook.POST, e);
a1.apply(mo);
verify(e, times(2)).apply(mo);
Assert.assertEquals(a1.count, 1);
}
use of org.btrplace.plan.event.Event in project scheduler by btrplace.
the class ReconfigurationPlanConverter method eventsToJSON.
private void eventsToJSON(final Action action, final JSONObject json) throws JSONConverterException {
final JSONObject hooks = new JSONObject();
for (final Hook k : Hook.values()) {
final JSONArray arr = new JSONArray();
for (final Event ev : action.getEvents(k)) {
final EventConverter c = java2json.get(ev.getClass());
if (c == null) {
throw new JSONConverterException("No converter " + "registered for '" + ev + "'");
}
arr.add(c.toJSON(ev));
}
hooks.put(k.toString(), arr);
}
json.put(HOOK_LABEL, hooks);
}
use of org.btrplace.plan.event.Event in project scheduler by btrplace.
the class InstanceConverter method toInstance.
public static Instance toInstance(ReconfigurationPlan p) {
Model mo = p.getOrigin().copy();
List<SatConstraint> cstrs = new ArrayList<>();
Set<VM> knownVMs = new HashSet<>();
Set<Node> knownNodes = new HashSet<>();
for (Action a : p.getActions()) {
if (a instanceof NodeEvent) {
Node n = ((NodeEvent) a).getNode();
knownNodes.add(n);
cstrs.add(new Schedule(n, a.getStart(), a.getEnd()));
if (a instanceof BootNode) {
cstrs.add(new Online(n));
} else if (a instanceof ShutdownNode) {
cstrs.add(new Offline(n));
}
} else if (a instanceof VMEvent) {
VM v = ((VMEvent) a).getVM();
knownVMs.add(v);
cstrs.add(new Schedule(v, a.getStart(), a.getEnd()));
if (a instanceof BootVM) {
cstrs.add(new Running(v));
cstrs.add(new Fence(v, ((BootVM) a).getDestinationNode()));
} else if (a instanceof MigrateVM) {
cstrs.add(new Fence(v, ((MigrateVM) a).getDestinationNode()));
cstrs.add(new Running(v));
} else if (a instanceof ShutdownVM) {
cstrs.add(new Ready(v));
} else if (a instanceof SuspendVM) {
cstrs.add(new Sleeping(v));
} else if (a instanceof ResumeVM) {
cstrs.add(new Running(v));
cstrs.add(new Fence(v, ((ResumeVM) a).getDestinationNode()));
} else if (a instanceof Allocate) {
cstrs.add(new Preserve(v, ((Allocate) a).getResourceId(), ((Allocate) a).getAmount()));
cstrs.add(new Fence(v, ((Allocate) a).getHost()));
}
}
// Catch the allocate events
for (Event e : a.getEvents(Action.Hook.PRE)) {
if (e instanceof AllocateEvent) {
cstrs.add(new Preserve(((AllocateEvent) e).getVM(), ((AllocateEvent) e).getResourceId(), ((AllocateEvent) e).getAmount()));
}
}
for (Event e : a.getEvents(Action.Hook.POST)) {
if (e instanceof AllocateEvent) {
cstrs.add(new Preserve(((AllocateEvent) e).getVM(), ((AllocateEvent) e).getResourceId(), ((AllocateEvent) e).getAmount()));
}
}
}
// State maintenance
for (Node n : mo.getMapping().getAllNodes()) {
if (knownNodes.contains(n)) {
continue;
}
if (mo.getMapping().isOnline(n)) {
cstrs.add(new Online(n));
} else if (mo.getMapping().isOffline(n)) {
cstrs.add(new Offline(n));
}
}
mo.getMapping().getAllVMs().stream().filter(v -> !knownVMs.contains(v)).forEach(v -> {
if (mo.getMapping().isReady(v)) {
cstrs.add(new Ready(v));
} else if (mo.getMapping().isRunning(v)) {
cstrs.add(new Running(v));
cstrs.add(new Fence(v, mo.getMapping().getVMLocation(v)));
} else if (mo.getMapping().isSleeping(v)) {
cstrs.add(new Sleeping(v));
cstrs.add(new Fence(v, mo.getMapping().getVMLocation(v)));
}
});
return new Instance(mo, cstrs, new MinMTTR());
}
Aggregations