use of org.btrplace.scheduler.choco.transition.VMTransition in project scheduler by btrplace.
the class CSplit method injectContinuous.
private boolean injectContinuous(ReconfigurationProblem rp, List<List<VM>> vmGroups) {
if (!cstr.isSatisfied(rp.getSourceModel())) {
rp.getLogger().error("The constraint '{}' must be already satisfied to provide a continuous restriction", cstr);
return false;
}
// Each VM on a group, can not go to a node until all the VMs from the other groups have leaved
// So, for each group of VM, we create a list containing the c^end and the c^host variable of all
// the VMs in the other groups then we establish precedences constraints.
TIntArrayList[] otherPositions = new TIntArrayList[vmGroups.size()];
@SuppressWarnings("unchecked") List<IntVar>[] otherEnds = new List[vmGroups.size()];
for (int i = 0; i < vmGroups.size(); i++) {
otherPositions[i] = new TIntArrayList();
otherEnds[i] = new ArrayList<>();
}
fullfillOthers(rp, otherPositions, otherEnds, vmGroups);
// Now, we just have to put way too many precedences constraint, one per VM.
for (int i = 0; i < vmGroups.size(); i++) {
List<VM> grp = vmGroups.get(i);
for (VM vm : grp) {
if (rp.getFutureRunningVMs().contains(vm)) {
VMTransition a = rp.getVMAction(vm);
IntVar myPos = a.getDSlice().getHoster();
IntVar myStart = a.getDSlice().getStart();
rp.getModel().post(new Precedences(myPos, myStart, otherPositions[i].toArray(), otherEnds[i].toArray(new IntVar[otherEnds[i].size()])));
}
}
}
return true;
}
Aggregations