Search in sources :

Example 6 with SuspendVM

use of org.btrplace.plan.event.SuspendVM in project scheduler by btrplace.

the class DefaultPlanApplierTest method testFireSimpleAction.

@Test(dependsOnMethods = { "testEventCommittedListeners" })
public void testFireSimpleAction() {
    DefaultPlanApplier app = new MockApplier();
    EventCommittedListener ev = mock(EventCommittedListener.class);
    app.addEventCommittedListener(ev);
    BootVM b = new BootVM(vms.get(0), ns.get(0), 0, 5);
    app.fireAction(b);
    verify(ev, times(1)).committed(b);
    ShutdownVM svm = new ShutdownVM(vms.get(0), ns.get(0), 0, 5);
    app.fireAction(svm);
    verify(ev, times(1)).committed(svm);
    BootNode bn = new BootNode(ns.get(0), 0, 5);
    app.fireAction(bn);
    verify(ev, times(1)).committed(bn);
    ShutdownNode sn = new ShutdownNode(ns.get(0), 0, 5);
    app.fireAction(sn);
    verify(ev, times(1)).committed(sn);
    SuspendVM susVM = new SuspendVM(vms.get(0), ns.get(0), ns.get(1), 0, 5);
    app.fireAction(susVM);
    verify(ev, times(1)).committed(susVM);
    ResumeVM resVM = new ResumeVM(vms.get(0), ns.get(0), ns.get(1), 0, 5);
    app.fireAction(resVM);
    verify(ev, times(1)).committed(resVM);
    MigrateVM miVM = new MigrateVM(vms.get(0), ns.get(0), ns.get(1), 0, 5);
    app.fireAction(miVM);
    verify(ev, times(1)).committed(miVM);
    KillVM kvm = new KillVM(vms.get(0), ns.get(0), 0, 5);
    app.fireAction(kvm);
    verify(ev, times(1)).committed(kvm);
    ForgeVM fvm = new ForgeVM(vms.get(0), 0, 5);
    app.fireAction(fvm);
    verify(ev, times(1)).committed(fvm);
}
Also used : KillVM(org.btrplace.plan.event.KillVM) ResumeVM(org.btrplace.plan.event.ResumeVM) SuspendVM(org.btrplace.plan.event.SuspendVM) BootNode(org.btrplace.plan.event.BootNode) EventCommittedListener(org.btrplace.plan.event.EventCommittedListener) BootVM(org.btrplace.plan.event.BootVM) ShutdownNode(org.btrplace.plan.event.ShutdownNode) MigrateVM(org.btrplace.plan.event.MigrateVM) ForgeVM(org.btrplace.plan.event.ForgeVM) ShutdownVM(org.btrplace.plan.event.ShutdownVM) Test(org.testng.annotations.Test)

Example 7 with SuspendVM

use of org.btrplace.plan.event.SuspendVM in project scheduler by btrplace.

the class DefaultReconfigurationPlanTest method testDumb.

@Test
public void testDumb() {
    Model mo = new DefaultModel();
    VM v = mo.newVM();
    Node n1 = mo.newNode();
    Node n2 = mo.newNode();
    mo.getMapping().addOnlineNode(n1);
    mo.getMapping().addOnlineNode(n2);
    mo.getMapping().addRunningVM(v, n1);
    ReconfigurationPlan p1 = new DefaultReconfigurationPlan(mo);
    Action a1 = new SuspendVM(v, n1, n1, 0, 1);
    Action a2 = new ShutdownNode(n1, 1, 2);
    Action a3 = new ShutdownNode(n2, 1, 2);
    Assert.assertTrue(p1.add(a1));
    Assert.assertTrue(p1.add(a2));
    Assert.assertTrue(p1.add(a3));
    Assert.assertTrue(p1.getActions().contains(a1));
    Assert.assertTrue(p1.getActions().contains(a2));
    Assert.assertTrue(p1.getActions().contains(a3));
}
Also used : DefaultModel(org.btrplace.model.DefaultModel) Action(org.btrplace.plan.event.Action) SuspendVM(org.btrplace.plan.event.SuspendVM) MigrateVM(org.btrplace.plan.event.MigrateVM) VM(org.btrplace.model.VM) SuspendVM(org.btrplace.plan.event.SuspendVM) Node(org.btrplace.model.Node) ShutdownNode(org.btrplace.plan.event.ShutdownNode) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) ShutdownNode(org.btrplace.plan.event.ShutdownNode) Test(org.testng.annotations.Test)

Example 8 with SuspendVM

use of org.btrplace.plan.event.SuspendVM in project scheduler by btrplace.

the class SplitTest method testContinuousIsSatisfied.

@Test
public void testContinuousIsSatisfied() {
    Model mo = new DefaultModel();
    Mapping map = mo.getMapping();
    List<Node> ns = Util.newNodes(mo, 3);
    List<VM> vms = Util.newVMs(mo, 5);
    map.addOnlineNode(ns.get(0));
    map.addOnlineNode(ns.get(1));
    map.addOnlineNode(ns.get(2));
    Collection<VM> s1 = Arrays.asList(vms.get(0), vms.get(1));
    Collection<VM> s2 = Arrays.asList(vms.get(2), vms.get(3));
    Collection<VM> s3 = Collections.singleton(vms.get(4));
    Collection<Collection<VM>> args = Arrays.asList(s1, s2, s3);
    map.addRunningVM(vms.get(0), ns.get(0));
    map.addRunningVM(vms.get(1), ns.get(0));
    map.addRunningVM(vms.get(2), ns.get(1));
    map.addRunningVM(vms.get(3), ns.get(1));
    Split sp = new Split(args, true);
    ReconfigurationPlan plan = new DefaultReconfigurationPlan(mo);
    Assert.assertEquals(sp.isSatisfied(plan), true);
    // Violation
    map.addRunningVM(vms.get(2), ns.get(0));
    Assert.assertEquals(sp.isSatisfied(plan), false);
    plan.add(new MigrateVM(vms.get(2), ns.get(0), ns.get(1), 0, 1));
    // False cause there is the initial violation
    Assert.assertEquals(sp.isSatisfied(plan), false);
    sp.setContinuous(false);
    Assert.assertEquals(sp.isSatisfied(plan), true);
    sp.setContinuous(true);
    // Temporary overlap
    plan.add(new MigrateVM(vms.get(2), ns.get(1), ns.get(0), 5, 6));
    plan.add(new MigrateVM(vms.get(2), ns.get(0), ns.get(1), 6, 7));
    Assert.assertEquals(sp.isSatisfied(plan), false);
    // Liberate ns.get(0) from vms.get(0) and vms.get(1) before
    plan.add(new SuspendVM(vms.get(0), ns.get(0), ns.get(0), 2, 3));
    plan.add(new ShutdownVM(vms.get(1), ns.get(0), 2, 3));
    sp.setContinuous(false);
    Assert.assertEquals(sp.isSatisfied(plan), true);
}
Also used : DefaultModel(org.btrplace.model.DefaultModel) Node(org.btrplace.model.Node) DefaultReconfigurationPlan(org.btrplace.plan.DefaultReconfigurationPlan) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) Mapping(org.btrplace.model.Mapping) MigrateVM(org.btrplace.plan.event.MigrateVM) DefaultReconfigurationPlan(org.btrplace.plan.DefaultReconfigurationPlan) SuspendVM(org.btrplace.plan.event.SuspendVM) MigrateVM(org.btrplace.plan.event.MigrateVM) VM(org.btrplace.model.VM) ShutdownVM(org.btrplace.plan.event.ShutdownVM) SuspendVM(org.btrplace.plan.event.SuspendVM) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) Collection(java.util.Collection) ShutdownVM(org.btrplace.plan.event.ShutdownVM) Test(org.testng.annotations.Test)

Example 9 with SuspendVM

use of org.btrplace.plan.event.SuspendVM 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());
}
Also used : Ready(org.btrplace.model.constraint.Ready) Node(org.btrplace.model.Node) Preserve(org.btrplace.model.constraint.Preserve) MigrateVM(org.btrplace.plan.event.MigrateVM) VMEvent(org.btrplace.plan.event.VMEvent) Schedule(org.btrplace.safeplace.testing.verification.btrplace.Schedule) Fence(org.btrplace.model.constraint.Fence) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) BootVM(org.btrplace.plan.event.BootVM) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) VM(org.btrplace.model.VM) Running(org.btrplace.model.constraint.Running) ShutdownVM(org.btrplace.plan.event.ShutdownVM) SuspendVM(org.btrplace.plan.event.SuspendVM) SatConstraint(org.btrplace.model.constraint.SatConstraint) Model(org.btrplace.model.Model) Sleeping(org.btrplace.model.constraint.Sleeping) ResumeVM(org.btrplace.plan.event.ResumeVM) Set(java.util.Set) BootNode(org.btrplace.plan.event.BootNode) Online(org.btrplace.model.constraint.Online) AllocateEvent(org.btrplace.plan.event.AllocateEvent) Event(org.btrplace.plan.event.Event) NodeEvent(org.btrplace.plan.event.NodeEvent) MinMTTR(org.btrplace.model.constraint.MinMTTR) Offline(org.btrplace.model.constraint.Offline) List(java.util.List) ShutdownNode(org.btrplace.plan.event.ShutdownNode) Allocate(org.btrplace.plan.event.Allocate) Instance(org.btrplace.model.Instance) Action(org.btrplace.plan.event.Action) Action(org.btrplace.plan.event.Action) Instance(org.btrplace.model.Instance) Node(org.btrplace.model.Node) BootNode(org.btrplace.plan.event.BootNode) ShutdownNode(org.btrplace.plan.event.ShutdownNode) ArrayList(java.util.ArrayList) MinMTTR(org.btrplace.model.constraint.MinMTTR) NodeEvent(org.btrplace.plan.event.NodeEvent) ResumeVM(org.btrplace.plan.event.ResumeVM) Fence(org.btrplace.model.constraint.Fence) HashSet(java.util.HashSet) VMEvent(org.btrplace.plan.event.VMEvent) BootNode(org.btrplace.plan.event.BootNode) SatConstraint(org.btrplace.model.constraint.SatConstraint) Offline(org.btrplace.model.constraint.Offline) MigrateVM(org.btrplace.plan.event.MigrateVM) Preserve(org.btrplace.model.constraint.Preserve) Ready(org.btrplace.model.constraint.Ready) SuspendVM(org.btrplace.plan.event.SuspendVM) Sleeping(org.btrplace.model.constraint.Sleeping) 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) Schedule(org.btrplace.safeplace.testing.verification.btrplace.Schedule) Model(org.btrplace.model.Model) Running(org.btrplace.model.constraint.Running) ShutdownNode(org.btrplace.plan.event.ShutdownNode) BootVM(org.btrplace.plan.event.BootVM) VMEvent(org.btrplace.plan.event.VMEvent) AllocateEvent(org.btrplace.plan.event.AllocateEvent) Event(org.btrplace.plan.event.Event) NodeEvent(org.btrplace.plan.event.NodeEvent) Online(org.btrplace.model.constraint.Online) ShutdownVM(org.btrplace.plan.event.ShutdownVM) Allocate(org.btrplace.plan.event.Allocate) AllocateEvent(org.btrplace.plan.event.AllocateEvent)

Example 10 with SuspendVM

use of org.btrplace.plan.event.SuspendVM in project scheduler by btrplace.

the class ReconfigurationPlanFuzzer method setDestinationState.

private void setDestinationState(ReconfigurationPlan p, VM v) {
    Mapping map = p.getOrigin().getMapping();
    Node host = map.getVMLocation(v);
    int n = rnd.nextInt(dstReadyVMs + dstRunningVMs + dstSleepingVMs);
    int[] bounds = schedule();
    int duration = bounds[1] - bounds[0];
    if (n < dstReadyVMs) {
        if (host != null) {
            p.add(new ShutdownVM(v, host, bounds[0], bounds[1]));
            p.getOrigin().getAttributes().put(v, "shutdown", duration);
        }
    } else if (n < dstReadyVMs + dstRunningVMs) {
        if (host == null) {
            p.add(new BootVM(v, pick(map.getAllNodes()), bounds[0], bounds[1]));
            p.getOrigin().getAttributes().put(v, "boot", duration);
        } else {
            // was running -> migrate
            if (map.isRunning(v)) {
                Node dst = pick(map.getAllNodes());
                if (!host.equals(dst)) {
                    p.add(new MigrateVM(v, host, dst, bounds[0], bounds[1]));
                    p.getOrigin().getAttributes().put(v, "migrate", duration);
                }
            } else {
                // was sleeping -> resume
                p.add(new ResumeVM(v, host, pick(map.getAllNodes()), bounds[0], bounds[1]));
                p.getOrigin().getAttributes().put(v, "resume", duration);
            }
        }
    } else {
        // moving to sleeping state
        if (map.isRunning(v)) {
            p.add(new SuspendVM(v, host, host, bounds[0], bounds[1]));
            p.getOrigin().getAttributes().put(v, "sleeping", duration);
        }
    }
}
Also used : ResumeVM(org.btrplace.plan.event.ResumeVM) SuspendVM(org.btrplace.plan.event.SuspendVM) Node(org.btrplace.model.Node) BootNode(org.btrplace.plan.event.BootNode) ShutdownNode(org.btrplace.plan.event.ShutdownNode) BootVM(org.btrplace.plan.event.BootVM) Mapping(org.btrplace.model.Mapping) MigrateVM(org.btrplace.plan.event.MigrateVM) ShutdownVM(org.btrplace.plan.event.ShutdownVM)

Aggregations

MigrateVM (org.btrplace.plan.event.MigrateVM)10 SuspendVM (org.btrplace.plan.event.SuspendVM)10 Node (org.btrplace.model.Node)9 ShutdownVM (org.btrplace.plan.event.ShutdownVM)9 Model (org.btrplace.model.Model)8 VM (org.btrplace.model.VM)8 BootVM (org.btrplace.plan.event.BootVM)8 ResumeVM (org.btrplace.plan.event.ResumeVM)8 Test (org.testng.annotations.Test)8 DefaultModel (org.btrplace.model.DefaultModel)7 ShutdownNode (org.btrplace.plan.event.ShutdownNode)6 Mapping (org.btrplace.model.Mapping)5 ReconfigurationPlan (org.btrplace.plan.ReconfigurationPlan)5 BootNode (org.btrplace.plan.event.BootNode)5 DefaultReconfigurationPlan (org.btrplace.plan.DefaultReconfigurationPlan)4 Allocate (org.btrplace.plan.event.Allocate)4 AllocateEvent (org.btrplace.plan.event.AllocateEvent)4 ForgeVM (org.btrplace.plan.event.ForgeVM)3 KillVM (org.btrplace.plan.event.KillVM)3 SubstitutedVMEvent (org.btrplace.plan.event.SubstitutedVMEvent)3