Search in sources :

Example 1 with VMEvent

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

the class ShareableResourceFuzzer method setDemand.

private void setDemand(ReconfigurationPlan p, ShareableResource rc, VM v, int c) {
    if (c == rc.getConsumption(v)) {
        return;
    }
    boolean found = false;
    for (Action a : p.getActions()) {
        if (a instanceof VMEvent && ((VMEvent) a).getVM().equals(v) && a instanceof RunningVMPlacement) {
            AllocateEvent ev = new AllocateEvent(v, id, c);
            Action.Hook h = Action.Hook.PRE;
            if (a instanceof MigrateVM) {
                h = Action.Hook.POST;
            }
            // For a migrated VM, we allocate once the migration over
            a.addEvent(h, ev);
            found = true;
            break;
        }
    }
    if (!found && p.getOrigin().getMapping().isRunning(v)) {
        int d = 1;
        if (p.getDuration() > 0) {
            d = rnd.nextInt(p.getDuration());
        }
        p.add(new Allocate(v, p.getOrigin().getMapping().getVMLocation(v), id, c, d, d + 1));
        p.getOrigin().getAttributes().put(v, "allocate", 1);
    }
}
Also used : Action(org.btrplace.plan.event.Action) VMEvent(org.btrplace.plan.event.VMEvent) RunningVMPlacement(org.btrplace.plan.event.RunningVMPlacement) MigrateVM(org.btrplace.plan.event.MigrateVM) Allocate(org.btrplace.plan.event.Allocate) AllocateEvent(org.btrplace.plan.event.AllocateEvent)

Example 2 with VMEvent

use of org.btrplace.plan.event.VMEvent 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 3 with VMEvent

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

the class Actions method eval.

@Override
public Set<Action> eval(Context mo, Object... args) {
    VM v = (VM) args[0];
    if (v == null) {
        throw new UnsupportedOperationException();
    }
    Set<Action> s = new HashSet<>();
    for (Action a : mo.getPlan()) {
        if (a instanceof VMEvent) {
            if (((VMEvent) a).getVM().equals(v)) {
                s.add(a);
            }
        }
    }
    return s;
}
Also used : Action(org.btrplace.plan.event.Action) VMEvent(org.btrplace.plan.event.VMEvent) VM(org.btrplace.model.VM) HashSet(java.util.HashSet)

Aggregations

Action (org.btrplace.plan.event.Action)3 VMEvent (org.btrplace.plan.event.VMEvent)3 HashSet (java.util.HashSet)2 VM (org.btrplace.model.VM)2 Allocate (org.btrplace.plan.event.Allocate)2 AllocateEvent (org.btrplace.plan.event.AllocateEvent)2 MigrateVM (org.btrplace.plan.event.MigrateVM)2 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Set (java.util.Set)1 Instance (org.btrplace.model.Instance)1 Model (org.btrplace.model.Model)1 Node (org.btrplace.model.Node)1 Fence (org.btrplace.model.constraint.Fence)1 MinMTTR (org.btrplace.model.constraint.MinMTTR)1 Offline (org.btrplace.model.constraint.Offline)1 Online (org.btrplace.model.constraint.Online)1 Preserve (org.btrplace.model.constraint.Preserve)1 Ready (org.btrplace.model.constraint.Ready)1 Running (org.btrplace.model.constraint.Running)1