This repository has been archived on 2024-04-10. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
elektron/schedulers/store.go
Pradyumna Kaushik b877d31cb8 Merged in schedPolSwitchConfigFile (pull request #8)
SchedPolSwitchConfigFile

Approved-by: Akash Kothawale <akothaw1@binghamton.edu>
2018-09-23 19:10:23 -04:00

69 lines
2.1 KiB
Go

package schedulers
import (
"encoding/json"
sched "github.com/mesos/mesos-go/api/v0/scheduler"
"github.com/pkg/errors"
"os"
)
// Names of different scheduling policies.
const (
ff = "first-fit"
bp = "bin-packing"
mgm = "max-greedymins"
mm = "max-min"
)
// Scheduling policy factory
var SchedPolicies map[string]SchedPolicyState = map[string]SchedPolicyState{
ff: &FirstFit{},
bp: &BinPackSortedWatts{},
mgm: &MaxGreedyMins{},
mm: &MaxMin{},
}
// Initialize scheduling policy characteristics using the provided config file.
func InitSchedPolicyCharacteristics(schedPoliciesConfigFilename string) error {
var schedPolConfig map[string]baseSchedPolicyState
if file, err := os.Open(schedPoliciesConfigFilename); err != nil {
return errors.Wrap(err, "Error opening file")
} else {
err := json.NewDecoder(file).Decode(&schedPolConfig)
if err != nil {
return errors.Wrap(err, "Error unmarshalling")
}
// Initializing.
// TODO: Be able to unmarshal a schedPolConfig JSON into any number of scheduling policies.
for schedPolName, schedPolState := range SchedPolicies {
switch t := schedPolState.(type) {
case *FirstFit:
t.TaskDistribution = schedPolConfig[schedPolName].TaskDistribution
t.VarianceCpuSharePerTask = schedPolConfig[schedPolName].VarianceCpuSharePerTask
case *BinPackSortedWatts:
t.TaskDistribution = schedPolConfig[schedPolName].TaskDistribution
t.VarianceCpuSharePerTask = schedPolConfig[schedPolName].VarianceCpuSharePerTask
case *MaxMin:
t.TaskDistribution = schedPolConfig[schedPolName].TaskDistribution
t.VarianceCpuSharePerTask = schedPolConfig[schedPolName].VarianceCpuSharePerTask
case *MaxGreedyMins:
t.TaskDistribution = schedPolConfig[schedPolName].TaskDistribution
t.VarianceCpuSharePerTask = schedPolConfig[schedPolName].VarianceCpuSharePerTask
}
}
}
return nil
}
// build the scheduler with the options being applied
func buildScheduler(s sched.Scheduler, opts ...schedulerOptions) {
s.(ElectronScheduler).init(opts...)
}
func SchedFactory(opts ...schedulerOptions) sched.Scheduler {
s := &BaseScheduler{}
buildScheduler(s, opts...)
return s
}