use of org.btrplace.scheduler.choco.DefaultChocoScheduler in project scheduler by btrplace.
the class ModelCustomization method run.
@Override
public void run() {
Model model = makeModel();
List<SatConstraint> cstrs = makeConstraints(model);
// Set attributes for the VMs
Attributes attrs = model.getAttributes();
for (VM vm : model.getMapping().getAllVMs()) {
attrs.put(vm, "template", vm.id() % 2 == 0 ? "small" : "large");
attrs.put(vm, "clone", true);
attrs.put(vm, "forge", vm.id() % 2 == 0 ? 2 : 10);
// forge == 2 && template == small for vm0, vm2, vm4, vm6, vm8
// forge == 10 && template == large for vm1, vm3, vm5, vm7, vm9
}
// Change the duration evaluator for MigrateVM action
ChocoScheduler cra = new DefaultChocoScheduler();
DurationEvaluators dev = cra.getDurationEvaluators();
dev.register(MigrateVM.class, new LinearToAResourceActionDuration<VM>("mem", 2, 3));
dev.register(BootVM.class, new ConstantActionDuration<>(1));
dev.register(ShutdownVM.class, new ConstantActionDuration<>(1));
// Relocate VM4:
// using a migration: (2 * mem + 3) = (2 * 2 + 3) = 7 sec.
// using a re-instantiation: forge + boot + shutdown = 2 + 1 + 1 = 4 sec.
// Relocate VM5:
// using a migration: (2 * mem + 3) = (2 * 3 + 3) = 9 sec.
// using a re-instantiation: forge + boot + shutdown = 10 + 1 + 1 = 12 sec.
cra.doOptimize(true);
ReconfigurationPlan plan = cra.solve(model, cstrs);
System.out.println(plan);
}
use of org.btrplace.scheduler.choco.DefaultChocoScheduler in project scheduler by btrplace.
the class AdvancedMigScheduling method solve.
private static void solve(Model mo, List<SatConstraint> cstrs) {
ReconfigurationPlan p = new DefaultChocoScheduler().solve(mo, cstrs);
System.out.println(p);
System.out.flush();
}
use of org.btrplace.scheduler.choco.DefaultChocoScheduler in project scheduler by btrplace.
the class FixedNodeSetsPartitioningTest method testSplit.
@Test
public void testSplit() throws SchedulerException {
Instance origin = makeInstance();
List<Collection<Node>> parts = splitIn(origin.getModel().getMapping().getAllNodes(), 3);
FixedNodeSetsPartitioning f = new FixedNodeSetsPartitioning(parts);
f.setWorkersCount(3);
List<Instance> subs = f.split(new DefaultParameters(), origin);
// Check disjoint set of ready VMs
Set<VM> allReady = new HashSet<>();
for (Instance i : subs) {
allReady.addAll(i.getModel().getMapping().getReadyVMs());
}
Assert.assertEquals(allReady.size(), 30);
// Quick solve
DefaultChocoScheduler cra = new DefaultChocoScheduler();
cra.setInstanceSolver(f);
ReconfigurationPlan plan = cra.solve(origin);
// all the VMs to launch have been booted
Assert.assertEquals(plan.getSize(), 30);
System.out.println(cra.getStatistics());
System.out.flush();
}
use of org.btrplace.scheduler.choco.DefaultChocoScheduler in project scheduler by btrplace.
the class StaticPartitioningTest method testSolvingIncorrectPartitioning.
@Test(expectedExceptions = { SchedulerException.class })
public void testSolvingIncorrectPartitioning() throws SchedulerException {
SynchronizedElementBuilder eb = new SynchronizedElementBuilder(new DefaultElementBuilder());
Model origin = new DefaultModel(eb);
Node n1 = origin.newNode();
Node n2 = origin.newNode();
VM vm1 = origin.newVM();
VM vm2 = origin.newVM();
/*
* 2 nodes among 2 instances, 2 VMs to boot on the nodes
*/
origin.getMapping().addOnlineNode(n1);
origin.getMapping().addOfflineNode(n2);
origin.getMapping().addReadyVM(vm1);
origin.getMapping().addReadyVM(vm2);
Model s1 = new SubModel(origin, eb, Collections.singletonList(n1), Collections.singleton(vm1));
Model s2 = new SubModel(origin, eb, Collections.singletonList(n2), Collections.singleton(vm2));
Instance i0 = new Instance(origin, new MinMTTR());
final Instance i1 = new Instance(s1, Running.newRunning(Collections.singletonList(vm1)), new MinMTTR());
final Instance i2 = new Instance(s2, new MinMTTR());
// Error, vm1 is in s1, not s2
i2.getSatConstraints().add(new Running(vm1));
StaticPartitioning st = new StaticPartitioning() {
@Override
public List<Instance> split(Parameters ps, Instance i) throws SchedulerException {
return Arrays.asList(i1, i2);
}
};
Parameters p = new DefaultChocoScheduler();
st.solve(p, i0);
}
use of org.btrplace.scheduler.choco.DefaultChocoScheduler in project scheduler by btrplace.
the class CAmongTest method testContinuousWithNotAlreadySatisfied.
@Test
public void testContinuousWithNotAlreadySatisfied() 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();
Node n1 = mo.newNode();
Node n2 = mo.newNode();
Node n3 = mo.newNode();
Node n4 = mo.newNode();
Mapping map = mo.getMapping().on(n1, n2, n3, n4).run(n1, vm1).run(n2, vm2).run(n3, vm3).ready(vm4, vm5);
Set<VM> vms = new HashSet<>(Arrays.asList(vm1, vm2, vm5));
Collection<Node> s1 = new HashSet<>(Arrays.asList(n1, n2));
Collection<Node> s2 = new HashSet<>(Arrays.asList(n3, n4));
Collection<Collection<Node>> pGrps = new HashSet<>(Arrays.asList(s1, s2));
Among a = new Among(vms, pGrps);
a.setContinuous(true);
List<SatConstraint> cstrs = new ArrayList<>();
cstrs.addAll(Running.newRunning(map.getAllVMs()));
cstrs.add(new Fence(vm2, Collections.singleton(n3)));
cstrs.add(a);
ChocoScheduler cra = new DefaultChocoScheduler();
ReconfigurationPlan p = cra.solve(mo, cstrs);
Assert.assertNull(p);
}
Aggregations