Track resource usage across the cluster. Created utility in utilities/ to track the total and the unused resources for each host in the cluster. Added utility to def/taskUtils.go to retrieve the resource requirement for a given taskID. Decoupled the code, to launch a list of tasks on a set of offerIDs, to schedulers/helpers.go and updated all the scheduling policies to call this function instead of directly calling mesos.SchedulerDriver#LaunchTasks. The resource availability of the cluster is updated at 2 stages -- 1. When the tasks are about to be launched (in schedulers/helpers.go#LaunchTasks), the scheduling policy switching logic will be able to adhere to the update in the resource availability due to the JUST launched tasks and 2. when a terminal status update is received for a task (in schedulers/base.go#statusUpdate).

This commit is contained in:
Pradyumna Kaushik 2018-01-26 17:29:43 -05:00
parent 6cd61ed18b
commit 657dc8df93
9 changed files with 232 additions and 5 deletions

View file

@ -155,7 +155,9 @@ func (s *MaxMin) ConsumeOffers(spc SchedPolicyContext, driver sched.SchedulerDri
if offerTaken {
baseSchedRef.LogTaskStarting(nil, offer)
driver.LaunchTasks([]*mesos.OfferID{offer.Id}, tasks, mesosUtils.DefaultFilter)
if err := LaunchTasks([]*mesos.OfferID{offer.Id}, tasks, driver); err != nil {
baseSchedRef.LogElectronError(err)
}
} else {
// If there was no match for the task
cpus, mem, watts := offerUtils.OfferAgg(offer)