92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package schedulers
|
|
|
|
import (
|
|
"bitbucket.org/sunybingcloud/elektron/def"
|
|
mesos "github.com/mesos/mesos-go/mesosproto"
|
|
sched "github.com/mesos/mesos-go/scheduler"
|
|
"log"
|
|
)
|
|
|
|
// Implements mesos scheduler.
|
|
type ElectronScheduler interface {
|
|
sched.Scheduler
|
|
init(opts ...schedPolicyOption)
|
|
}
|
|
|
|
type base struct {
|
|
ElectronScheduler
|
|
tasksCreated int
|
|
tasksRunning int
|
|
tasks []def.Task
|
|
metrics map[string]def.Metric
|
|
running map[string]map[string]bool
|
|
wattsAsAResource bool
|
|
classMapWatts bool
|
|
|
|
// First set of PCP values are garbage values, signal to logger to start recording when we're
|
|
// about to schedule a new task.
|
|
RecordPCP *bool
|
|
|
|
// This channel is closed when the program receives an interrupt,
|
|
// signalling that the program should shut down.
|
|
Shutdown chan struct{}
|
|
// This channel is closed after shutdown is closed, and only when all
|
|
// outstanding tasks have been cleaned up.
|
|
Done chan struct{}
|
|
|
|
// Controls when to shutdown pcp logging.
|
|
PCPLog chan struct{}
|
|
|
|
schedTrace *log.Logger
|
|
}
|
|
|
|
func (s *base) init(opts ...schedPolicyOption) {
|
|
for _, opt := range opts {
|
|
// Applying options.
|
|
if err := opt(s); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
s.running = make(map[string]map[string]bool)
|
|
}
|
|
|
|
func (s *base) OfferRescinded(_ sched.SchedulerDriver, offerID *mesos.OfferID) {
|
|
log.Printf("Offer %s rescinded", offerID)
|
|
}
|
|
func (s *base) SlaveLost(_ sched.SchedulerDriver, slaveID *mesos.SlaveID) {
|
|
log.Printf("Slave %s lost", slaveID)
|
|
}
|
|
func (s *base) ExecutorLost(_ sched.SchedulerDriver,
|
|
executorID *mesos.ExecutorID,
|
|
slaveID *mesos.SlaveID, status int) {
|
|
log.Printf("Executor %s on slave %s was lost", executorID, slaveID)
|
|
}
|
|
|
|
func (s *base) Error(_ sched.SchedulerDriver, err string) {
|
|
log.Printf("Receiving an error: %s", err)
|
|
}
|
|
|
|
func (s *base) FrameworkMessage(
|
|
driver sched.SchedulerDriver,
|
|
executorID *mesos.ExecutorID,
|
|
slaveID *mesos.SlaveID,
|
|
message string) {
|
|
|
|
log.Println("Getting a framework message: ", message)
|
|
log.Printf("Received a framework message from some unknown source: %s", *executorID.Value)
|
|
}
|
|
|
|
func (s *base) Registered(
|
|
_ sched.SchedulerDriver,
|
|
frameworkID *mesos.FrameworkID,
|
|
masterInfo *mesos.MasterInfo) {
|
|
log.Printf("Framework %s registered with master %s", frameworkID, masterInfo)
|
|
}
|
|
|
|
func (s *base) Reregistered(_ sched.SchedulerDriver, masterInfo *mesos.MasterInfo) {
|
|
log.Printf("Framework re-registered with master %s", masterInfo)
|
|
}
|
|
|
|
func (s *base) Disconnected(sched.SchedulerDriver) {
|
|
log.Println("Framework disconnected with master")
|
|
}
|