use of es.bsc.compss.scheduler.exceptions.UnassignedActionException in project compss by bsc-wdc.
the class MOResourceScheduler method tryToLaunch.
private boolean tryToLaunch(AllocatableAction action) {
boolean launched = false;
try {
action.tryToLaunch();
launched = true;
} catch (InvalidSchedulingException ise) {
}
if (!launched) {
long actionScore = MOScore.getActionScore(action);
Score aScore = new MOScore(actionScore, 0, 0, 0, 0, 0);
try {
action.schedule(aScore);
try {
action.tryToLaunch();
} catch (InvalidSchedulingException ise2) {
// Impossible exception.
LOGGER.error(ise2);
}
} catch (BlockedActionException | UnassignedActionException be) {
// Can not happen since there was an original source
LOGGER.error(be);
}
}
return launched;
}
use of es.bsc.compss.scheduler.exceptions.UnassignedActionException in project compss by bsc-wdc.
the class FIFODataScheduler method purgeFreeActions.
/*
* *********************************************************************************************************
* *********************************************************************************************************
* ********************************* SCHEDULING OPERATIONS *************************************************
* *********************************************************************************************************
* *********************************************************************************************************
*/
@Override
public <T extends WorkerResourceDescription> void purgeFreeActions(List<AllocatableAction> dataFreeActions, List<AllocatableAction> resourceFreeActions, List<AllocatableAction> blockedCandidates, ResourceScheduler<T> resource) {
LOGGER.debug("[DataScheduler] Treating dependency free actions");
PriorityQueue<ObjectValue<AllocatableAction>> executableActions = new PriorityQueue<>();
for (AllocatableAction action : dataFreeActions) {
Score actionScore = this.generateActionScore(action);
Score fullScore = action.schedulingScore(resource, actionScore);
ObjectValue<AllocatableAction> obj = new ObjectValue<>(action, fullScore);
executableActions.add(obj);
}
dataFreeActions.clear();
while (!executableActions.isEmpty()) {
ObjectValue<AllocatableAction> obj = executableActions.poll();
AllocatableAction freeAction = obj.getObject();
try {
scheduleAction(freeAction, resource, obj.getScore());
tryToLaunch(freeAction);
} catch (BlockedActionException e) {
removeFromReady(freeAction);
addToBlocked(freeAction);
} catch (UnassignedActionException e) {
dataFreeActions.add(freeAction);
}
}
List<AllocatableAction> unassignedReadyActions = this.unassignedReadyActions.getAllActions();
this.unassignedReadyActions.removeAllActions();
dataFreeActions.addAll(unassignedReadyActions);
}
use of es.bsc.compss.scheduler.exceptions.UnassignedActionException in project compss by bsc-wdc.
the class ExecutionAction method tryToSchedule.
@SuppressWarnings("unchecked")
@Override
public final void tryToSchedule(Score actionScore) throws BlockedActionException, UnassignedActionException {
// COMPUTE RESOURCE CANDIDATES
List<ResourceScheduler<? extends WorkerResourceDescription>> candidates = new LinkedList<>();
if (this.isTargetResourceEnforced()) {
// The scheduling is forced to a given resource
candidates.add((ResourceScheduler<WorkerResourceDescription>) this.getEnforcedTargetResource());
} else if (isSchedulingConstrained()) {
// The scheduling is constrained by dependencies
for (AllocatableAction a : this.getConstrainingPredecessors()) {
candidates.add((ResourceScheduler<WorkerResourceDescription>) a.getAssignedResource());
}
} else {
// Free scheduling
List<ResourceScheduler<? extends WorkerResourceDescription>> compatibleCandidates = getCompatibleWorkers();
if (compatibleCandidates.size() == 0) {
throw new BlockedActionException();
}
for (ResourceScheduler<? extends WorkerResourceDescription> currentWorker : compatibleCandidates) {
if (currentWorker.getResource().hasAvailableSlots()) {
candidates.add(currentWorker);
}
}
if (candidates.size() == 0) {
throw new UnassignedActionException();
}
}
this.schedule(actionScore, candidates);
}
use of es.bsc.compss.scheduler.exceptions.UnassignedActionException in project compss by bsc-wdc.
the class TaskScheduler method reducedWorkerResources.
@SuppressWarnings("unchecked")
private <T extends WorkerResourceDescription> void reducedWorkerResources(ResourceScheduler<T> worker, ResourceUpdate<T> modification) {
CloudMethodWorker cloudWorker = (CloudMethodWorker) worker.getResource();
if (!cloudWorker.getDescription().getTypeComposition().isEmpty()) {
synchronized (workers) {
workers.remove(((ResourceScheduler<WorkerResourceDescription>) worker).getResource());
int coreCount = CoreManager.getCoreCount();
List<Implementation>[] runningCoreImpls = worker.getExecutableImpls();
for (int coreId = 0; coreId < coreCount; coreId++) {
for (Implementation impl : runningCoreImpls[coreId]) {
Profile p = worker.getProfile(impl);
if (p != null) {
offVMsProfiles[coreId][impl.getImplementationId()].accumulate(p);
}
}
}
}
this.workerRemoved((ResourceScheduler<WorkerResourceDescription>) worker);
StopWorkerAction action = new StopWorkerAction(generateSchedulingInformation(worker), worker, this, modification);
try {
action.schedule((ResourceScheduler<WorkerResourceDescription>) worker, (Score) null);
action.tryToLaunch();
} catch (BlockedActionException | UnassignedActionException | InvalidSchedulingException e) {
// Can not be blocked nor unassigned
}
} else {
ResourceManager.terminateCloudResource(cloudWorker, (CloudMethodResourceDescription) modification.getModification());
}
}
use of es.bsc.compss.scheduler.exceptions.UnassignedActionException in project compss by bsc-wdc.
the class MOScheduleOptimizer method scheduleOnWorker.
public void scheduleOnWorker(AllocatableAction action, Implementation impl, OptimizationWorker ow) {
boolean failedSpecificScheduling = false;
try {
action.schedule(ow.getResource(), impl);
try {
action.tryToLaunch();
} catch (InvalidSchedulingException ise) {
failedSpecificScheduling = true;
}
} catch (BlockedActionException bae) {
// Can not happen since there was an original source
} catch (UnassignedActionException be) {
failedSpecificScheduling = true;
}
if (failedSpecificScheduling) {
try {
long actionScore = MOScore.getActionScore(action);
long dataTime = MOScore.getDataPredecessorTime(action.getDataPredecessors());
Score aScore = new MOScore(actionScore, dataTime, 0, 0, 0, 0);
action.schedule(aScore);
try {
action.tryToLaunch();
} catch (InvalidSchedulingException ise2) {
// Impossible exception if schedule method on action is ok.
}
} catch (BlockedActionException | UnassignedActionException be) {
// Can not happen since there was an original source
}
}
}
Aggregations