Search in sources :

Example 1 with SubstitutedVMEvent

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)));
}
Also used : KillVM(org.btrplace.plan.event.KillVM) DefaultModel(org.btrplace.model.DefaultModel) Node(org.btrplace.model.Node) MigrateVM(org.btrplace.plan.event.MigrateVM) ForgeVM(org.btrplace.plan.event.ForgeVM) SubstitutedVMEvent(org.btrplace.plan.event.SubstitutedVMEvent) ResumeVM(org.btrplace.plan.event.ResumeVM) SuspendVM(org.btrplace.plan.event.SuspendVM) ResumeVM(org.btrplace.plan.event.ResumeVM) MigrateVM(org.btrplace.plan.event.MigrateVM) BootVM(org.btrplace.plan.event.BootVM) VM(org.btrplace.model.VM) ShutdownVM(org.btrplace.plan.event.ShutdownVM) SuspendVM(org.btrplace.plan.event.SuspendVM) ForgeVM(org.btrplace.plan.event.ForgeVM) KillVM(org.btrplace.plan.event.KillVM) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) BootVM(org.btrplace.plan.event.BootVM) ShutdownVM(org.btrplace.plan.event.ShutdownVM) Allocate(org.btrplace.plan.event.Allocate) AllocateEvent(org.btrplace.plan.event.AllocateEvent) Test(org.testng.annotations.Test)

Example 2 with SubstitutedVMEvent

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)));
}
Also used : DefaultModel(org.btrplace.model.DefaultModel) MigrateVM(org.btrplace.plan.event.MigrateVM) BootVM(org.btrplace.plan.event.BootVM) VM(org.btrplace.model.VM) ShutdownVM(org.btrplace.plan.event.ShutdownVM) SuspendVM(org.btrplace.plan.event.SuspendVM) ResumeVM(org.btrplace.plan.event.ResumeVM) ForgeVM(org.btrplace.plan.event.ForgeVM) KillVM(org.btrplace.plan.event.KillVM) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) SubstitutedVMEvent(org.btrplace.plan.event.SubstitutedVMEvent) HashSet(java.util.HashSet) Test(org.testng.annotations.Test)

Example 3 with SubstitutedVMEvent

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));
}
Also used : KillVM(org.btrplace.plan.event.KillVM) DefaultModel(org.btrplace.model.DefaultModel) BootNode(org.btrplace.plan.event.BootNode) Node(org.btrplace.model.Node) BootNode(org.btrplace.plan.event.BootNode) ShutdownNode(org.btrplace.plan.event.ShutdownNode) MigrateVM(org.btrplace.plan.event.MigrateVM) ForgeVM(org.btrplace.plan.event.ForgeVM) SubstitutedVMEvent(org.btrplace.plan.event.SubstitutedVMEvent) ResumeVM(org.btrplace.plan.event.ResumeVM) SuspendVM(org.btrplace.plan.event.SuspendVM) MigrateVM(org.btrplace.plan.event.MigrateVM) BootVM(org.btrplace.plan.event.BootVM) VM(org.btrplace.model.VM) ShutdownVM(org.btrplace.plan.event.ShutdownVM) SuspendVM(org.btrplace.plan.event.SuspendVM) ResumeVM(org.btrplace.plan.event.ResumeVM) ForgeVM(org.btrplace.plan.event.ForgeVM) KillVM(org.btrplace.plan.event.KillVM) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) BootVM(org.btrplace.plan.event.BootVM) ShutdownNode(org.btrplace.plan.event.ShutdownNode) ShutdownVM(org.btrplace.plan.event.ShutdownVM) Allocate(org.btrplace.plan.event.Allocate) HashSet(java.util.HashSet) AllocateEvent(org.btrplace.plan.event.AllocateEvent) Test(org.testng.annotations.Test)

Example 4 with SubstitutedVMEvent

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;
}
Also used : Action(org.btrplace.plan.event.Action) Node(org.btrplace.model.Node) MigrateVM(org.btrplace.plan.event.MigrateVM) SubstitutedVMEvent(org.btrplace.plan.event.SubstitutedVMEvent) MigrateVM(org.btrplace.plan.event.MigrateVM) VM(org.btrplace.model.VM) DurationEvaluators(org.btrplace.scheduler.choco.duration.DurationEvaluators)

Example 5 with SubstitutedVMEvent

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);
}
Also used : DefaultModel(org.btrplace.model.DefaultModel) BootNode(org.btrplace.plan.event.BootNode) Node(org.btrplace.model.Node) BootNode(org.btrplace.plan.event.BootNode) ShutdownNode(org.btrplace.plan.event.ShutdownNode) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) DefaultReconfigurationPlan(org.btrplace.plan.DefaultReconfigurationPlan) Mapping(org.btrplace.model.Mapping) MigrateVM(org.btrplace.plan.event.MigrateVM) SubstitutedVMEvent(org.btrplace.plan.event.SubstitutedVMEvent) DefaultReconfigurationPlan(org.btrplace.plan.DefaultReconfigurationPlan) ResumeVM(org.btrplace.plan.event.ResumeVM) SuspendVM(org.btrplace.plan.event.SuspendVM) MigrateVM(org.btrplace.plan.event.MigrateVM) BootVM(org.btrplace.plan.event.BootVM) VM(org.btrplace.model.VM) ShutdownVM(org.btrplace.plan.event.ShutdownVM) SuspendVM(org.btrplace.plan.event.SuspendVM) ResumeVM(org.btrplace.plan.event.ResumeVM) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) BootVM(org.btrplace.plan.event.BootVM) ShutdownNode(org.btrplace.plan.event.ShutdownNode) ShutdownVM(org.btrplace.plan.event.ShutdownVM) Allocate(org.btrplace.plan.event.Allocate) AllocateEvent(org.btrplace.plan.event.AllocateEvent) Test(org.testng.annotations.Test)

Aggregations

SubstitutedVMEvent (org.btrplace.plan.event.SubstitutedVMEvent)7 VM (org.btrplace.model.VM)6 BootVM (org.btrplace.plan.event.BootVM)6 MigrateVM (org.btrplace.plan.event.MigrateVM)6 Test (org.testng.annotations.Test)6 DefaultModel (org.btrplace.model.DefaultModel)5 Model (org.btrplace.model.Model)5 Node (org.btrplace.model.Node)5 ResumeVM (org.btrplace.plan.event.ResumeVM)5 ShutdownVM (org.btrplace.plan.event.ShutdownVM)5 SuspendVM (org.btrplace.plan.event.SuspendVM)5 AllocateEvent (org.btrplace.plan.event.AllocateEvent)4 ForgeVM (org.btrplace.plan.event.ForgeVM)4 KillVM (org.btrplace.plan.event.KillVM)4 Allocate (org.btrplace.plan.event.Allocate)3 BootNode (org.btrplace.plan.event.BootNode)3 ShutdownNode (org.btrplace.plan.event.ShutdownNode)3 HashSet (java.util.HashSet)2 Mapping (org.btrplace.model.Mapping)1 DefaultReconfigurationPlan (org.btrplace.plan.DefaultReconfigurationPlan)1