use of org.btrplace.plan.event.SubstitutedVMEvent in project scheduler by btrplace.
the class DenyMyVMsActionsTest method testDeny.
@Test
public void testDeny() {
Model mo = new DefaultModel();
List<VM> vms = Util.newVMs(mo, 10);
List<Node> ns = Util.newNodes(mo, 10);
when(cstr.getInvolvedNodes()).thenReturn(Arrays.asList(ns.get(0), ns.get(1), ns.get(2)));
when(cstr.getInvolvedVMs()).thenReturn(Arrays.asList(vms.get(0), vms.get(1), vms.get(2)));
DenyMyVMsActions<SatConstraint> c = new DenyMyVMsActions<SatConstraint>(cstr) {
};
Assert.assertFalse(c.start(new BootVM(vms.get(0), ns.get(0), 0, 3)));
Assert.assertTrue(c.start(new BootVM(vms.get(8), ns.get(0), 0, 3)));
Assert.assertFalse(c.start(new ResumeVM(vms.get(0), ns.get(0), ns.get(1), 0, 3)));
Assert.assertTrue(c.start(new ResumeVM(vms.get(6), ns.get(0), ns.get(1), 0, 3)));
Assert.assertFalse(c.start(new MigrateVM(vms.get(0), ns.get(0), ns.get(1), 0, 3)));
Assert.assertTrue(c.start(new MigrateVM(vms.get(4), ns.get(0), ns.get(1), 0, 3)));
Assert.assertFalse(c.start(new SuspendVM(vms.get(0), ns.get(0), ns.get(1), 0, 3)));
Assert.assertTrue(c.start(new SuspendVM(vms.get(9), ns.get(0), ns.get(1), 0, 3)));
Assert.assertFalse(c.start(new ShutdownVM(vms.get(0), ns.get(0), 0, 3)));
Assert.assertTrue(c.start(new ShutdownVM(vms.get(5), ns.get(0), 0, 3)));
Assert.assertFalse(c.start(new KillVM(vms.get(0), ns.get(0), 0, 3)));
Assert.assertTrue(c.start(new KillVM(vms.get(6), ns.get(0), 0, 3)));
Assert.assertFalse(c.start(new ForgeVM(vms.get(0), 0, 3)));
Assert.assertTrue(c.start(new ForgeVM(vms.get(6), 0, 3)));
Assert.assertFalse(c.start(new Allocate(vms.get(0), ns.get(0), "cpu", 3, 4, 5)));
Assert.assertTrue(c.start(new Allocate(vms.get(5), ns.get(0), "cpu", 3, 4, 5)));
Assert.assertFalse(c.consume(new SubstitutedVMEvent(vms.get(0), vms.get(2))));
Assert.assertTrue(c.consume(new SubstitutedVMEvent(vms.get(9), vms.get(2))));
Assert.assertFalse(c.consume(new AllocateEvent(vms.get(2), "cpu", 3)));
Assert.assertTrue(c.consume(new AllocateEvent(vms.get(9), "cpu", 3)));
}
use of org.btrplace.plan.event.SubstitutedVMEvent in project scheduler by btrplace.
the class AllowAllConstraintCheckerTest method testAnyTracking.
@Test(dependsOnMethods = "testInstantiation")
public void testAnyTracking() {
SatConstraint cstr = mock(SatConstraint.class);
AllowAllConstraintChecker<SatConstraint> c = new AllowAllConstraintChecker<>(cstr);
Model mo = new DefaultModel();
List<VM> vms = Util.newVMs(mo, 10);
when(cstr.getInvolvedVMs()).thenReturn(vms);
Set<VM> vs = new HashSet<>(Arrays.asList(vms.get(4), vms.get(6), vms.get(9)));
c.track(vs);
// VM1 (one of the involved vms) has to be removed to be substituted by vms.get(0)0
c.consume(new SubstitutedVMEvent(vms.get(6), vms.get(9)));
Assert.assertTrue(vs.contains(vms.get(9)));
Assert.assertFalse(vs.contains(vms.get(6)));
// VM5 is not involved, no removal
c.consume(new SubstitutedVMEvent(vms.get(6), vms.get(0)));
Assert.assertFalse(vs.contains(vms.get(6)));
Assert.assertFalse(vs.contains(vms.get(0)));
}
use of org.btrplace.plan.event.SubstitutedVMEvent in project scheduler by btrplace.
the class AllowAllConstraintCheckerTest method testAcceptance.
@Test
public void testAcceptance() {
SatConstraint cstr = mock(SatConstraint.class);
AllowAllConstraintChecker<?> c = mock(AllowAllConstraintChecker.class, CALLS_REAL_METHODS);
Model mo = new DefaultModel();
List<VM> vms = Util.newVMs(mo, 10);
List<Node> ns = Util.newNodes(mo, 10);
when(cstr.getInvolvedNodes()).thenReturn(ns);
when(cstr.getInvolvedVMs()).thenReturn(vms);
MigrateVM m = new MigrateVM(vms.get(0), ns.get(0), ns.get(1), 0, 3);
Assert.assertTrue(c.start(m));
verify(c).startRunningVMPlacement(m);
c.end(m);
verify(c).endRunningVMPlacement(m);
BootVM b = new BootVM(vms.get(0), ns.get(0), 0, 3);
Assert.assertTrue(c.start(b));
verify(c).startRunningVMPlacement(b);
c.end(b);
verify(c).endRunningVMPlacement(b);
ResumeVM r = new ResumeVM(vms.get(0), ns.get(0), ns.get(1), 0, 3);
Assert.assertTrue(c.start(r));
verify(c).startRunningVMPlacement(r);
c.end(r);
verify(c).endRunningVMPlacement(r);
// do not use the mock as the constructor is important
// while earlier, the mock was needed for the verify()
c = new AllowAllConstraintChecker<>(cstr);
Set<VM> allVMs = new HashSet<>();
for (Node n : mo.getMapping().getOnlineNodes()) {
allVMs.addAll(mo.getMapping().getRunningVMs(n));
allVMs.addAll(mo.getMapping().getSleepingVMs(n));
}
allVMs.addAll(mo.getMapping().getReadyVMs());
c.track(allVMs);
SuspendVM s = new SuspendVM(vms.get(0), ns.get(0), ns.get(1), 0, 3);
Assert.assertTrue(c.start(s));
ShutdownVM s2 = new ShutdownVM(vms.get(0), ns.get(0), 0, 3);
Assert.assertTrue(c.start(s2));
KillVM k = new KillVM(vms.get(0), ns.get(0), 0, 3);
Assert.assertTrue(c.start(k));
ForgeVM f = new ForgeVM(vms.get(0), 0, 3);
Assert.assertTrue(c.start(f));
BootNode bn = new BootNode(ns.get(0), 0, 3);
Assert.assertTrue(c.start(bn));
ShutdownNode sn = new ShutdownNode(ns.get(0), 0, 3);
Assert.assertTrue(c.start(sn));
SubstitutedVMEvent ss = new SubstitutedVMEvent(vms.get(9), vms.get(2));
Assert.assertTrue(c.consume(ss));
Allocate a = new Allocate(vms.get(0), ns.get(0), "cpu", 3, 4, 5);
Assert.assertTrue(c.start(a));
AllocateEvent ae = new AllocateEvent(vms.get(0), "cpu", 3);
Assert.assertTrue(c.consume(ae));
}
use of org.btrplace.plan.event.SubstitutedVMEvent in project scheduler by btrplace.
the class RelocatableVM method insertActions.
@Override
public boolean insertActions(Solution s, ReconfigurationPlan plan) {
DurationEvaluators dev = rp.getDurationEvaluators();
// Only if the VM doesn't stay
if (s.getIntVal(cSlice.getHoster()) != (s.getIntVal(dSlice.getHoster()))) {
Action a;
Node dst = rp.getNode(s.getIntVal(dSlice.getHoster()));
// Migration
if (s.getIntVal(doReinstantiation) == 0) {
int st = s.getIntVal(getStart());
int ed = s.getIntVal(getEnd());
if (getBandwidth() != null) {
a = new MigrateVM(vm, src, dst, st, ed, s.getIntVal(getBandwidth()));
} else {
a = new MigrateVM(vm, src, dst, st, ed);
}
plan.add(a);
// Re-instantiation
} else {
VM newVM = rp.cloneVM(vm);
if (newVM == null) {
rp.getLogger().debug("Unable to get a new int to plan the re-instantiate of VM {}", vm);
return false;
}
org.btrplace.plan.event.ForgeVM fvm = new org.btrplace.plan.event.ForgeVM(newVM, s.getIntVal(dSlice.getStart()) - dev.evaluate(rp.getSourceModel(), org.btrplace.plan.event.ForgeVM.class, vm), s.getIntVal(dSlice.getStart()));
// forge the new VM from a template
plan.add(fvm);
// Boot the new VM
int endForging = fvm.getEnd();
org.btrplace.plan.event.BootVM boot = new org.btrplace.plan.event.BootVM(newVM, dst, endForging, endForging + dev.evaluate(rp.getSourceModel(), org.btrplace.plan.event.BootVM.class, newVM));
boot.addEvent(Action.Hook.PRE, new SubstitutedVMEvent(vm, newVM));
return plan.add(boot) && plan.add(new org.btrplace.plan.event.ShutdownVM(vm, src, boot.getEnd(), s.getIntVal(cSlice.getEnd())));
}
}
return true;
}
use of org.btrplace.plan.event.SubstitutedVMEvent in project scheduler by btrplace.
the class ReconfigurationPlanConverterTest method testBundle.
@Test
public void testBundle() throws JSONConverterException {
Model mo = new DefaultModel();
VM vm1 = mo.newVM();
VM vm2 = mo.newVM();
VM vm3 = mo.newVM();
VM vm4 = mo.newVM();
VM vm5 = mo.newVM();
Node n1 = mo.newNode();
Node n2 = mo.newNode();
Node n3 = mo.newNode();
Mapping map = mo.getMapping();
map.addOnlineNode(n1);
map.addOfflineNode(n2);
map.addOnlineNode(n3);
map.addReadyVM(vm1);
map.addRunningVM(vm2, n1);
map.addRunningVM(vm3, n1);
map.addSleepingVM(vm4, n3);
map.addRunningVM(vm5, n3);
ReconfigurationPlan plan = new DefaultReconfigurationPlan(mo);
plan.add(new BootVM(vm1, n3, 1, 2));
final MigrateVM mm = new MigrateVM(vm3, n3, n2, 4, 5, 4000);
mm.addEvent(Action.Hook.PRE, new AllocateEvent(vm3, "bar", 5));
mm.addEvent(Action.Hook.POST, new SubstitutedVMEvent(vm4, vm5));
mm.addEvent(Action.Hook.POST, new AllocateEvent(vm5, "baz", 4));
plan.add(mm);
plan.add(new ShutdownVM(vm5, n3, 3, 4));
plan.add(new Allocate(vm1, n3, "foo", 5, 3, 5));
plan.add(new SuspendVM(vm3, n3, n3, 3, 5));
plan.add(new ResumeVM(vm4, n3, n3, 4, 8));
plan.add(new BootNode(n2, 2, 5));
plan.add(new ShutdownNode(n1, 5, 10));
ReconfigurationPlanConverter rcp = ReconfigurationPlanConverter.newBundle();
String j = rcp.toJSONString(plan);
ReconfigurationPlan p2 = rcp.fromJSON(j);
Assert.assertEquals(p2, plan);
}
Aggregations