Merged in akash/LogPolicySwitch (pull request #4)
Scheduling Policy Switch Logger Approved-by: Pradyumna Kaushik <pkaushi1@binghamton.edu>
This commit is contained in:
parent
3fa4a45ca7
commit
b1bd21f730
11 changed files with 94 additions and 4 deletions
|
@ -14,6 +14,7 @@ var (
|
||||||
SCHED_TRACE = messageNametoMessageType("SCHED_TRACE")
|
SCHED_TRACE = messageNametoMessageType("SCHED_TRACE")
|
||||||
PCP = messageNametoMessageType("PCP")
|
PCP = messageNametoMessageType("PCP")
|
||||||
DEG_COL = messageNametoMessageType("DEG_COL")
|
DEG_COL = messageNametoMessageType("DEG_COL")
|
||||||
|
SPS = messageNametoMessageType("SPS")
|
||||||
)
|
)
|
||||||
|
|
||||||
// Text colors for the different types of log messages.
|
// Text colors for the different types of log messages.
|
||||||
|
|
|
@ -19,6 +19,7 @@ func newLogger() *LoggerDriver {
|
||||||
SUCCESS: true,
|
SUCCESS: true,
|
||||||
PCP: true,
|
PCP: true,
|
||||||
DEG_COL: true,
|
DEG_COL: true,
|
||||||
|
SPS: true,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return logger
|
return logger
|
||||||
|
|
|
@ -12,6 +12,7 @@ const (
|
||||||
schedTraceLogger = "schedTrace-logger"
|
schedTraceLogger = "schedTrace-logger"
|
||||||
pcpLogger = "pcp-logger"
|
pcpLogger = "pcp-logger"
|
||||||
degColLogger = "degCol-logger"
|
degColLogger = "degCol-logger"
|
||||||
|
spsLogger = "schedPolicySwitch-logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Logger class factory
|
// Logger class factory
|
||||||
|
@ -20,6 +21,7 @@ var Loggers map[string]loggerObserver = map[string]loggerObserver{
|
||||||
schedTraceLogger: nil,
|
schedTraceLogger: nil,
|
||||||
pcpLogger: nil,
|
pcpLogger: nil,
|
||||||
degColLogger: nil,
|
degColLogger: nil,
|
||||||
|
spsLogger: nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger options to help initialize loggers
|
// Logger options to help initialize loggers
|
||||||
|
@ -40,6 +42,7 @@ func withLoggerSpecifics(prefix string) loggerOption {
|
||||||
schedTraceLogger: &specifics{},
|
schedTraceLogger: &specifics{},
|
||||||
pcpLogger: &specifics{},
|
pcpLogger: &specifics{},
|
||||||
degColLogger: &specifics{},
|
degColLogger: &specifics{},
|
||||||
|
spsLogger: &specifics{},
|
||||||
}
|
}
|
||||||
l.(*loggerObserverImpl).setLogFilePrefix(prefix)
|
l.(*loggerObserverImpl).setLogFilePrefix(prefix)
|
||||||
l.(*loggerObserverImpl).setLogFile()
|
l.(*loggerObserverImpl).setLogFile()
|
||||||
|
@ -64,6 +67,9 @@ func attachAllLoggers(lg *LoggerDriver, startTime time.Time, prefix string) {
|
||||||
Loggers[degColLogger] = &DegColLogger{
|
Loggers[degColLogger] = &DegColLogger{
|
||||||
loggerObserverImpl: *loi,
|
loggerObserverImpl: *loi,
|
||||||
}
|
}
|
||||||
|
Loggers[spsLogger] = &SchedPolicySwitchLogger{
|
||||||
|
loggerObserverImpl: *loi,
|
||||||
|
}
|
||||||
|
|
||||||
for _, lmt := range GetLogMessageTypes() {
|
for _, lmt := range GetLogMessageTypes() {
|
||||||
switch lmt {
|
switch lmt {
|
||||||
|
@ -81,6 +87,8 @@ func attachAllLoggers(lg *LoggerDriver, startTime time.Time, prefix string) {
|
||||||
lg.attach(PCP, Loggers[pcpLogger])
|
lg.attach(PCP, Loggers[pcpLogger])
|
||||||
case DEG_COL.String():
|
case DEG_COL.String():
|
||||||
lg.attach(DEG_COL, Loggers[degColLogger])
|
lg.attach(DEG_COL, Loggers[degColLogger])
|
||||||
|
case SPS.String():
|
||||||
|
lg.attach(SPS, Loggers[spsLogger])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -77,6 +77,13 @@ func (loi *loggerObserverImpl) setLogFilePrefix(prefix string) {
|
||||||
degColLogFilePrefix = loi.logDirectory + "/" + degColLogFilePrefix
|
degColLogFilePrefix = loi.logDirectory + "/" + degColLogFilePrefix
|
||||||
}
|
}
|
||||||
loi.logObserverSpecifics[degColLogger].logFilePrefix = degColLogFilePrefix
|
loi.logObserverSpecifics[degColLogger].logFilePrefix = degColLogFilePrefix
|
||||||
|
|
||||||
|
// Setting logFilePrefix for schedulingPolicySwitch logger
|
||||||
|
schedPolicySwitchLogFilePrefix := prefix + "_schedPolicySwitch.log"
|
||||||
|
if loi.logDirectory != "" {
|
||||||
|
schedPolicySwitchLogFilePrefix = loi.logDirectory + "/" + schedPolicySwitchLogFilePrefix
|
||||||
|
}
|
||||||
|
loi.logObserverSpecifics[spsLogger].logFilePrefix = schedPolicySwitchLogFilePrefix
|
||||||
}
|
}
|
||||||
|
|
||||||
func (loi *loggerObserverImpl) setLogDirectory(dirName string) {
|
func (loi *loggerObserverImpl) setLogDirectory(dirName string) {
|
||||||
|
|
9
logging/def/schedPolicySwitchLogger.go
Normal file
9
logging/def/schedPolicySwitchLogger.go
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
package logging
|
||||||
|
|
||||||
|
type SchedPolicySwitchLogger struct {
|
||||||
|
loggerObserverImpl
|
||||||
|
}
|
||||||
|
|
||||||
|
func (pl *SchedPolicySwitchLogger) Log(message string) {
|
||||||
|
pl.logObserverSpecifics[spsLogger].logFile.Println(message)
|
||||||
|
}
|
|
@ -7,6 +7,7 @@ import (
|
||||||
mesos "github.com/mesos/mesos-go/api/v0/mesosproto"
|
mesos "github.com/mesos/mesos-go/api/v0/mesosproto"
|
||||||
sched "github.com/mesos/mesos-go/api/v0/scheduler"
|
sched "github.com/mesos/mesos-go/api/v0/scheduler"
|
||||||
"log"
|
"log"
|
||||||
|
"math/rand"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Decides if to take an offer or not
|
// Decides if to take an offer or not
|
||||||
|
@ -168,5 +169,18 @@ func (s *MaxGreedyMins) ConsumeOffers(spc SchedPolicyContext, driver sched.Sched
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s.switchIfNecessary(spc)
|
// Switch scheduling policy only if feature enabled from CLI
|
||||||
|
if baseSchedRef.schedPolSwitchEnabled {
|
||||||
|
// 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)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
index--
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
mesos "github.com/mesos/mesos-go/api/v0/mesosproto"
|
mesos "github.com/mesos/mesos-go/api/v0/mesosproto"
|
||||||
sched "github.com/mesos/mesos-go/api/v0/scheduler"
|
sched "github.com/mesos/mesos-go/api/v0/scheduler"
|
||||||
"log"
|
"log"
|
||||||
|
"math/rand"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Decides if to take an offer or not
|
// Decides if to take an offer or not
|
||||||
|
@ -162,5 +163,18 @@ func (s *MaxMin) ConsumeOffers(spc SchedPolicyContext, driver sched.SchedulerDri
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s.switchIfNecessary(spc)
|
// Switch scheduling policy only if feature enabled from CLI
|
||||||
|
if baseSchedRef.schedPolSwitchEnabled {
|
||||||
|
// 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)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
index--
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -400,3 +400,9 @@ func (s *BaseScheduler) LogTaskStatusUpdate(status *mesos.TaskStatus) {
|
||||||
*status.TaskId.Value, msgColor.Sprint(NameFor(status.State)))
|
*status.TaskId.Value, msgColor.Sprint(NameFor(status.State)))
|
||||||
s.Log(lmt, msg)
|
s.Log(lmt, msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *BaseScheduler) LogSchedPolicySwitch(name string, nextPolicy SchedPolicyState) {
|
||||||
|
if s.curSchedPolicy != nextPolicy {
|
||||||
|
s.Log(elecLogDef.SPS, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
mesos "github.com/mesos/mesos-go/api/v0/mesosproto"
|
mesos "github.com/mesos/mesos-go/api/v0/mesosproto"
|
||||||
sched "github.com/mesos/mesos-go/api/v0/scheduler"
|
sched "github.com/mesos/mesos-go/api/v0/scheduler"
|
||||||
"log"
|
"log"
|
||||||
|
"math/rand"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Decides if to take an offer or not
|
// Decides if to take an offer or not
|
||||||
|
@ -112,5 +113,18 @@ func (s *BinPackSortedWatts) ConsumeOffers(spc SchedPolicyContext, driver sched.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s.switchIfNecessary(spc)
|
// Switch scheduling policy only if feature enabled from CLI
|
||||||
|
if baseSchedRef.schedPolSwitchEnabled {
|
||||||
|
// 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)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
index--
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,4 +70,6 @@ type ElectronScheduler interface {
|
||||||
LogDisconnected()
|
LogDisconnected()
|
||||||
// Log Status update of a task
|
// Log Status update of a task
|
||||||
LogTaskStatusUpdate(status *mesos.TaskStatus)
|
LogTaskStatusUpdate(status *mesos.TaskStatus)
|
||||||
|
// Log Scheduling policy switches (if any)
|
||||||
|
LogSchedulingPolicySwitch()
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
mesos "github.com/mesos/mesos-go/api/v0/mesosproto"
|
mesos "github.com/mesos/mesos-go/api/v0/mesosproto"
|
||||||
sched "github.com/mesos/mesos-go/api/v0/scheduler"
|
sched "github.com/mesos/mesos-go/api/v0/scheduler"
|
||||||
"log"
|
"log"
|
||||||
|
"math/rand"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Decides if to take an offer or not
|
// Decides if to take an offer or not
|
||||||
|
@ -98,5 +99,18 @@ func (s *FirstFit) ConsumeOffers(spc SchedPolicyContext, driver sched.SchedulerD
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
s.switchIfNecessary(spc)
|
// Switch scheduling policy only if feature enabled from CLI
|
||||||
|
if baseSchedRef.schedPolSwitchEnabled {
|
||||||
|
// 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)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
index--
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue