Search in sources :

Example 1 with Event

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

the class ActionTest method testEvents.

@Test
public void testEvents() {
    Action a1 = new MockAction(new VM(1), 1, 3);
    Event e = mock(Event.class);
    Assert.assertTrue(a1.addEvent(Action.Hook.PRE, e));
    Assert.assertFalse(a1.addEvent(Action.Hook.PRE, e));
    Assert.assertEquals(1, a1.getEvents(Action.Hook.PRE).size());
    a1.addEvent(Action.Hook.POST, e);
    Assert.assertEquals(1, a1.getEvents(Action.Hook.POST).size());
    Event e2 = mock(Event.class);
    a1.addEvent(Action.Hook.POST, e2);
    Assert.assertEquals(2, a1.getEvents(Action.Hook.POST).size());
    String str = a1.toString();
    // Check for issue #203. Only one occurrence of the event is reported.
    Assert.assertEquals(str.indexOf(String.valueOf(e2.hashCode())), str.lastIndexOf(String.valueOf(e2.hashCode())));
}
Also used : Action(org.btrplace.plan.event.Action) VM(org.btrplace.model.VM) Event(org.btrplace.plan.event.Event) Test(org.testng.annotations.Test)

Example 2 with Event

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

the class ActionTest method testApply.

@Test
public void testApply() {
    Model mo = new DefaultModel();
    MockAction a1 = new MockAction(new VM(1), 1, 3);
    Event e = mock(Event.class);
    when(e.apply(mo)).thenReturn(true);
    a1.addEvent(Action.Hook.PRE, e);
    a1.addEvent(Action.Hook.POST, e);
    a1.apply(mo);
    verify(e, times(2)).apply(mo);
    Assert.assertEquals(a1.count, 1);
}
Also used : DefaultModel(org.btrplace.model.DefaultModel) VM(org.btrplace.model.VM) Model(org.btrplace.model.Model) DefaultModel(org.btrplace.model.DefaultModel) Event(org.btrplace.plan.event.Event) Test(org.testng.annotations.Test)

Example 3 with Event

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

the class ReconfigurationPlanConverter method eventsToJSON.

private void eventsToJSON(final Action action, final JSONObject json) throws JSONConverterException {
    final JSONObject hooks = new JSONObject();
    for (final Hook k : Hook.values()) {
        final JSONArray arr = new JSONArray();
        for (final Event ev : action.getEvents(k)) {
            final EventConverter c = java2json.get(ev.getClass());
            if (c == null) {
                throw new JSONConverterException("No converter " + "registered for '" + ev + "'");
            }
            arr.add(c.toJSON(ev));
        }
        hooks.put(k.toString(), arr);
    }
    json.put(HOOK_LABEL, hooks);
}
Also used : Hook(org.btrplace.plan.event.Action.Hook) JSONObject(net.minidev.json.JSONObject) JSONArray(net.minidev.json.JSONArray) Event(org.btrplace.plan.event.Event) JSONConverterException(org.btrplace.json.JSONConverterException)

Example 4 with Event

use of org.btrplace.plan.event.Event 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)

Aggregations

Event (org.btrplace.plan.event.Event)4 VM (org.btrplace.model.VM)3 Model (org.btrplace.model.Model)2 Action (org.btrplace.plan.event.Action)2 Test (org.testng.annotations.Test)2 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Set (java.util.Set)1 JSONArray (net.minidev.json.JSONArray)1 JSONObject (net.minidev.json.JSONObject)1 JSONConverterException (org.btrplace.json.JSONConverterException)1 DefaultModel (org.btrplace.model.DefaultModel)1 Instance (org.btrplace.model.Instance)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