Search in sources :

Example 21 with Fence

use of org.btrplace.model.constraint.Fence in project scheduler by btrplace.

the class CShareableResourceTest method testRealNodeUsage.

/**
 * Place some VMs and check realNodeUsage is updated accordingly
 */
@Test
public void testRealNodeUsage() throws SchedulerException {
    Model mo = new DefaultModel();
    Mapping ma = mo.getMapping();
    VM vm1 = mo.newVM();
    VM vm2 = mo.newVM();
    Node n1 = mo.newNode();
    Node n2 = mo.newNode();
    ma.addOnlineNode(n1);
    ma.addOnlineNode(n2);
    ma.addRunningVM(vm1, n1);
    ma.addRunningVM(vm2, n1);
    ShareableResource rc = new ShareableResource("foo", 0, 0);
    rc.setConsumption(vm1, 2);
    rc.setConsumption(vm2, 3);
    rc.setCapacity(n1, 5);
    rc.setCapacity(n2, 3);
    mo.attach(rc);
    ChocoScheduler s = new DefaultChocoScheduler();
    List<SatConstraint> cstrs = new ArrayList<>();
    cstrs.add(new Fence(vm1, n1));
    cstrs.add(new Fence(vm2, n2));
    ReconfigurationPlan p = s.solve(mo, cstrs);
    Assert.assertNotNull(p);
    Model res = p.getResult();
    rc = (ShareableResource.get(res, "foo"));
    Assert.assertEquals(2, rc.getConsumption(vm1));
    Assert.assertEquals(3, rc.getConsumption(vm2));
}
Also used : DefaultModel(org.btrplace.model.DefaultModel) Node(org.btrplace.model.Node) SatConstraint(org.btrplace.model.constraint.SatConstraint) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) ArrayList(java.util.ArrayList) Mapping(org.btrplace.model.Mapping) ShareableResource(org.btrplace.model.view.ShareableResource) DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) ChocoScheduler(org.btrplace.scheduler.choco.ChocoScheduler) DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) VM(org.btrplace.model.VM) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) Fence(org.btrplace.model.constraint.Fence) Test(org.testng.annotations.Test)

Example 22 with Fence

use of org.btrplace.model.constraint.Fence 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 23 with Fence

use of org.btrplace.model.constraint.Fence in project scheduler by btrplace.

the class FenceSplitter method split.

@Override
public boolean split(Fence cstr, Instance origin, final List<Instance> partitions, TIntIntHashMap vmsPosition, TIntIntHashMap nodePosition) {
    final SplittableElementSet<Node> nodeIndex = SplittableElementSet.newNodeIndex(cstr.getInvolvedNodes(), nodePosition);
    VM v = cstr.getInvolvedVMs().iterator().next();
    int p = vmsPosition.get(v.id());
    Set<Node> ns = nodeIndex.getSubSet(p);
    if (!ns.isEmpty()) {
        return partitions.get(p).getSatConstraints().add(new Fence(v, ns));
    }
    return true;
}
Also used : Node(org.btrplace.model.Node) VM(org.btrplace.model.VM) Fence(org.btrplace.model.constraint.Fence)

Example 24 with Fence

use of org.btrplace.model.constraint.Fence in project scheduler by btrplace.

the class CGatherTest method testContinuousWithRelocationOfVMs.

/**
 * We try to relocate co-located VMs in continuous mode. Not allowed
 *
 * @throws org.btrplace.scheduler.SchedulerException
 */
@Test
public void testContinuousWithRelocationOfVMs() throws SchedulerException {
    Model mo = new DefaultModel();
    VM vm1 = mo.newVM();
    VM vm2 = mo.newVM();
    Node n1 = mo.newNode();
    Node n2 = mo.newNode();
    Mapping map = mo.getMapping().on(n1, n2).run(n2, vm1, vm2);
    Gather g = new Gather(map.getAllVMs());
    g.setContinuous(true);
    List<SatConstraint> cstrs = new ArrayList<>();
    cstrs.addAll(Running.newRunning(map.getAllVMs()));
    cstrs.add(g);
    cstrs.add(new Fence(vm1, Collections.singleton(n1)));
    cstrs.add(new Fence(vm2, Collections.singleton(n1)));
    ChocoScheduler cra = new DefaultChocoScheduler();
    ReconfigurationPlan plan = cra.solve(mo, cstrs);
    Assert.assertNull(plan);
}
Also used : DefaultModel(org.btrplace.model.DefaultModel) Node(org.btrplace.model.Node) SatConstraint(org.btrplace.model.constraint.SatConstraint) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) ArrayList(java.util.ArrayList) Mapping(org.btrplace.model.Mapping) Gather(org.btrplace.model.constraint.Gather) DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) ChocoScheduler(org.btrplace.scheduler.choco.ChocoScheduler) DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) VM(org.btrplace.model.VM) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) Fence(org.btrplace.model.constraint.Fence) Test(org.testng.annotations.Test)

Example 25 with Fence

use of org.btrplace.model.constraint.Fence in project scheduler by btrplace.

the class CSplitTest method testContinuous.

// @Test
@Test(enabled = false)
public void testContinuous() throws SchedulerException {
    Model mo = new DefaultModel();
    VM vm1 = mo.newVM();
    VM vm2 = mo.newVM();
    VM vm3 = mo.newVM();
    VM vm4 = mo.newVM();
    VM vm5 = mo.newVM();
    VM vm6 = mo.newVM();
    VM vm7 = mo.newVM();
    VM vm8 = mo.newVM();
    Node n1 = mo.newNode();
    Node n2 = mo.newNode();
    Node n3 = mo.newNode();
    Node n4 = mo.newNode();
    Node n5 = mo.newNode();
    Mapping map = mo.getMapping().on(n1, n2, n3, n4, n5).run(n1, vm1, vm2).run(n3, vm3, vm4, vm5).run(n5, vm6, vm7, vm8);
    Collection<VM> g1 = Arrays.asList(vm1, vm2);
    Collection<VM> g2 = Arrays.asList(vm3, vm4, vm5);
    Collection<VM> g3 = Arrays.asList(vm6, vm7);
    Collection<Collection<VM>> grps = Arrays.asList(g1, g2, g3);
    Split s = new Split(grps);
    s.setContinuous(true);
    ChocoScheduler cra = new DefaultChocoScheduler();
    List<SatConstraint> cstrs = new ArrayList<>();
    cstrs.add(s);
    // go away before the other arrive.
    for (VM v : map.getRunningVMs(n1)) {
        cstrs.add(new Fence(v, Collections.singleton(n3)));
    }
    // cra.setTimeLimit(2);
    ReconfigurationPlan p = cra.solve(mo, cstrs);
    Assert.assertNotNull(p);
    Assert.assertTrue(p.getSize() > 0);
}
Also used : DefaultModel(org.btrplace.model.DefaultModel) Node(org.btrplace.model.Node) SatConstraint(org.btrplace.model.constraint.SatConstraint) ReconfigurationPlan(org.btrplace.plan.ReconfigurationPlan) ArrayList(java.util.ArrayList) Mapping(org.btrplace.model.Mapping) DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) ChocoScheduler(org.btrplace.scheduler.choco.ChocoScheduler) DefaultChocoScheduler(org.btrplace.scheduler.choco.DefaultChocoScheduler) VM(org.btrplace.model.VM) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) Collection(java.util.Collection) Fence(org.btrplace.model.constraint.Fence) Split(org.btrplace.model.constraint.Split) Test(org.testng.annotations.Test)

Aggregations

Fence (org.btrplace.model.constraint.Fence)30 Model (org.btrplace.model.Model)27 VM (org.btrplace.model.VM)27 SatConstraint (org.btrplace.model.constraint.SatConstraint)27 DefaultModel (org.btrplace.model.DefaultModel)26 Node (org.btrplace.model.Node)26 ReconfigurationPlan (org.btrplace.plan.ReconfigurationPlan)25 DefaultChocoScheduler (org.btrplace.scheduler.choco.DefaultChocoScheduler)23 ArrayList (java.util.ArrayList)22 Test (org.testng.annotations.Test)22 ChocoScheduler (org.btrplace.scheduler.choco.ChocoScheduler)19 Mapping (org.btrplace.model.Mapping)16 HashSet (java.util.HashSet)11 ShareableResource (org.btrplace.model.view.ShareableResource)10 Collection (java.util.Collection)7 Instance (org.btrplace.model.Instance)7 Offline (org.btrplace.model.constraint.Offline)7 Network (org.btrplace.model.view.network.Network)7 Switch (org.btrplace.model.view.network.Switch)6 SchedulerException (org.btrplace.scheduler.SchedulerException)6