adding back the call to base#LogSchedPolicySwitch(...). Had removed this addition by mistake when resolving merge conflicts. Approved-by: Akash Kothawale <akothaw1@binghamton.edu> Approved-by: Pradyumna Kaushik <pkaushi1@binghamton.edu>
47 lines
1.5 KiB
Go
47 lines
1.5 KiB
Go
package schedulers
|
|
|
|
import (
|
|
mesos "github.com/mesos/mesos-go/api/v0/mesosproto"
|
|
sched "github.com/mesos/mesos-go/api/v0/scheduler"
|
|
"math/rand"
|
|
)
|
|
|
|
type SchedPolicyContext interface {
|
|
// Change the state of scheduling.
|
|
SwitchSchedPol(s SchedPolicyState)
|
|
}
|
|
|
|
type SchedPolicyState interface {
|
|
// Define the particular scheduling policy's methodology of resource offer consumption.
|
|
ConsumeOffers(SchedPolicyContext, sched.SchedulerDriver, []*mesos.Offer)
|
|
}
|
|
|
|
type baseSchedPolicyState struct {
|
|
SchedPolicyState
|
|
// Keep track of the number of tasks that have been scheduled.
|
|
numTasksScheduled int
|
|
}
|
|
|
|
func (bsps *baseSchedPolicyState) switchIfNecessary(spc SchedPolicyContext) {
|
|
baseSchedRef := spc.(*BaseScheduler)
|
|
// Switch scheduling policy only if feature enabled from CLI
|
|
if baseSchedRef.schedPolSwitchEnabled {
|
|
// Need to recompute size of the scheduling window for the next offer cycle.
|
|
// The next scheduling policy will schedule at max schedWindowSize number of tasks.
|
|
baseSchedRef.schedWindowSize, baseSchedRef.numTasksInSchedWindow =
|
|
baseSchedRef.schedWindowResStrategy.Apply(func() interface{} { return baseSchedRef.tasks })
|
|
// Switching to a random scheduling policy.
|
|
// TODO: Switch based on some criteria.
|
|
index := rand.Intn(len(SchedPolicies))
|
|
for k, v := range SchedPolicies {
|
|
if index == 0 {
|
|
baseSchedRef.LogSchedPolicySwitch(k, v)
|
|
spc.SwitchSchedPol(v)
|
|
// Resetting the number of tasks scheduled.
|
|
bsps.numTasksScheduled = 0
|
|
break
|
|
}
|
|
index--
|
|
}
|
|
}
|
|
}
|