2020-06-14 13:12:22 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"sync"
|
2020-07-02 08:58:44 +00:00
|
|
|
"os"
|
|
|
|
"strings"
|
2020-07-03 13:39:40 +00:00
|
|
|
"strconv"
|
2020-06-14 13:12:22 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Configuration struct {
|
2020-07-03 13:39:40 +00:00
|
|
|
KafkaBrokers []string `json:"KafkaBrokers"`
|
|
|
|
KafkaTopic string `json:"KafkaTopic"`
|
|
|
|
SchedulerPolicy string `json:"SchedulerPolicy"`
|
|
|
|
ListenAddr string `json:"ListenAddr"`
|
|
|
|
HDFSAddress string `json:"HDFSAddress"`
|
|
|
|
HDFSBaseDir string `json:"HDFSBaseDir"`
|
|
|
|
DFSBaseDir string `json:"DFSBaseDir"`
|
|
|
|
EnableShareRatio float64 `json:"EnableShareRatio"`
|
2020-07-06 14:17:29 +00:00
|
|
|
ShareMaxUtilization float64 `json:"ShareMaxUtilization"`
|
2020-07-03 13:39:40 +00:00
|
|
|
EnablePreScheduleRatio float64 `json:"EnablePreScheduleRatio"`
|
2020-07-22 07:27:44 +00:00
|
|
|
PreScheduleExtraTime int `json:"PreScheduleExtraTime"` /* seconds of schedule ahead except pre+post */
|
2020-07-06 14:17:29 +00:00
|
|
|
PreScheduleTimeout int `json:"PreScheduleTimeout"`
|
2020-07-22 07:27:44 +00:00
|
|
|
JobMaxRetries int `json:"scheduler.job_max_retries"`
|
2020-07-03 13:39:40 +00:00
|
|
|
|
|
|
|
mock bool
|
|
|
|
mu sync.Mutex
|
2020-06-14 13:12:22 +00:00
|
|
|
}
|
|
|
|
|
2020-07-02 08:58:44 +00:00
|
|
|
var configurationInstance *Configuration
|
2020-06-14 13:12:22 +00:00
|
|
|
var ConfigurationInstanceLock sync.Mutex
|
|
|
|
|
|
|
|
func InstanceOfConfiguration() *Configuration {
|
|
|
|
ConfigurationInstanceLock.Lock()
|
|
|
|
defer ConfigurationInstanceLock.Unlock()
|
|
|
|
|
2020-07-02 08:58:44 +00:00
|
|
|
if configurationInstance == nil {
|
|
|
|
/* set default values */
|
|
|
|
configurationInstance = &Configuration{
|
|
|
|
mock: false,
|
|
|
|
KafkaBrokers: []string{
|
|
|
|
"kafka-node1:9092",
|
|
|
|
"kafka-node2:9092",
|
|
|
|
"kafka-node3:9092",
|
|
|
|
},
|
2020-07-03 13:39:40 +00:00
|
|
|
KafkaTopic: "yao",
|
|
|
|
SchedulerPolicy: "fair",
|
|
|
|
ListenAddr: "0.0.0.0:8080",
|
|
|
|
HDFSAddress: "",
|
|
|
|
HDFSBaseDir: "/user/root/",
|
|
|
|
DFSBaseDir: "",
|
|
|
|
EnableShareRatio: 1.5,
|
2020-07-06 14:17:29 +00:00
|
|
|
ShareMaxUtilization: 1.3, // more than 1.0 to expect more improvement
|
2020-07-03 13:39:40 +00:00
|
|
|
EnablePreScheduleRatio: 1.5,
|
2020-07-06 14:17:29 +00:00
|
|
|
PreScheduleExtraTime: 15,
|
2020-07-22 07:27:44 +00:00
|
|
|
JobMaxRetries: 0,
|
2020-07-02 08:58:44 +00:00
|
|
|
}
|
2020-07-21 13:41:11 +00:00
|
|
|
}
|
|
|
|
return configurationInstance
|
|
|
|
}
|
2020-07-02 08:58:44 +00:00
|
|
|
|
2020-07-21 13:41:11 +00:00
|
|
|
/* read conf value from env */
|
|
|
|
func (config *Configuration) InitFromEnv() {
|
|
|
|
value := os.Getenv("KafkaBrokers")
|
|
|
|
if len(value) != 0 {
|
|
|
|
configurationInstance.KafkaBrokers = strings.Split(value, ",")
|
|
|
|
}
|
|
|
|
value = os.Getenv("KafkaTopic")
|
|
|
|
if len(value) != 0 {
|
|
|
|
configurationInstance.KafkaTopic = value
|
|
|
|
}
|
|
|
|
value = os.Getenv("SchedulerPolicy")
|
|
|
|
if len(value) != 0 {
|
|
|
|
configurationInstance.SchedulerPolicy = value
|
|
|
|
}
|
|
|
|
value = os.Getenv("ListenAddr")
|
|
|
|
if len(value) != 0 {
|
|
|
|
configurationInstance.ListenAddr = value
|
|
|
|
}
|
|
|
|
value = os.Getenv("HDFSAddress")
|
|
|
|
if len(value) != 0 {
|
|
|
|
configurationInstance.HDFSAddress = value
|
|
|
|
}
|
|
|
|
value = os.Getenv("HDFSBaseDir")
|
|
|
|
if len(value) != 0 {
|
|
|
|
configurationInstance.HDFSBaseDir = value
|
|
|
|
}
|
|
|
|
value = os.Getenv("DFSBaseDir")
|
|
|
|
if len(value) != 0 {
|
|
|
|
configurationInstance.DFSBaseDir = value
|
|
|
|
}
|
|
|
|
value = os.Getenv("EnableShareRatio")
|
|
|
|
if len(value) != 0 {
|
|
|
|
if val, err := strconv.ParseFloat(value, 32); err == nil {
|
|
|
|
configurationInstance.EnableShareRatio = val
|
2020-07-03 13:39:40 +00:00
|
|
|
}
|
2020-07-21 13:41:11 +00:00
|
|
|
}
|
|
|
|
value = os.Getenv("ShareMaxUtilization")
|
|
|
|
if len(value) != 0 {
|
|
|
|
if val, err := strconv.ParseFloat(value, 32); err == nil {
|
|
|
|
configurationInstance.ShareMaxUtilization = val
|
2020-07-06 14:17:29 +00:00
|
|
|
}
|
2020-07-21 13:41:11 +00:00
|
|
|
}
|
|
|
|
value = os.Getenv("EnablePreScheduleRatio")
|
|
|
|
if len(value) != 0 {
|
|
|
|
if val, err := strconv.ParseFloat(value, 32); err == nil {
|
|
|
|
configurationInstance.EnablePreScheduleRatio = val
|
2020-07-02 08:58:44 +00:00
|
|
|
}
|
2020-07-21 13:41:11 +00:00
|
|
|
}
|
|
|
|
value = os.Getenv("PreScheduleExtraTime")
|
|
|
|
if len(value) != 0 {
|
|
|
|
if val, err := strconv.Atoi(value); err == nil {
|
|
|
|
configurationInstance.PreScheduleExtraTime = val
|
2020-07-06 14:17:29 +00:00
|
|
|
}
|
2020-07-21 13:41:11 +00:00
|
|
|
}
|
|
|
|
value = os.Getenv("PreScheduleTimeout")
|
|
|
|
if len(value) != 0 {
|
|
|
|
if val, err := strconv.Atoi(value); err == nil {
|
|
|
|
configurationInstance.PreScheduleTimeout = val
|
2020-07-06 14:17:29 +00:00
|
|
|
}
|
2020-06-14 13:12:22 +00:00
|
|
|
}
|
2020-07-22 07:27:44 +00:00
|
|
|
value = os.Getenv("scheduler.job_max_retries")
|
|
|
|
if len(value) != 0 {
|
|
|
|
if val, err := strconv.Atoi(value); err == nil && val >= 0 {
|
|
|
|
configurationInstance.JobMaxRetries = val
|
|
|
|
}
|
|
|
|
}
|
2020-06-14 13:12:22 +00:00
|
|
|
}
|
|
|
|
|
2020-07-11 06:04:20 +00:00
|
|
|
func (config *Configuration) SetMockEnabled(enabled bool) bool {
|
2020-06-14 13:12:22 +00:00
|
|
|
config.mu.Lock()
|
|
|
|
defer config.mu.Unlock()
|
2020-07-11 06:04:20 +00:00
|
|
|
config.mock = enabled
|
|
|
|
log.Info("configuration.mock = ", enabled)
|
2020-06-14 13:12:22 +00:00
|
|
|
return true
|
|
|
|
}
|
2020-07-02 08:58:44 +00:00
|
|
|
|
2020-07-03 13:39:40 +00:00
|
|
|
func (config *Configuration) SetShareRatio(ratio float64) bool {
|
2020-07-17 03:08:55 +00:00
|
|
|
config.mu.Lock()
|
|
|
|
defer config.mu.Unlock()
|
2020-07-03 13:39:40 +00:00
|
|
|
config.EnableShareRatio = ratio
|
|
|
|
log.Info("enableShareRatio is updated to ", ratio)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
func (config *Configuration) SetPreScheduleRatio(ratio float64) bool {
|
2020-07-17 03:08:55 +00:00
|
|
|
config.mu.Lock()
|
|
|
|
defer config.mu.Unlock()
|
2020-07-03 13:39:40 +00:00
|
|
|
config.EnablePreScheduleRatio = ratio
|
|
|
|
log.Info("enablePreScheduleRatio is updated to ", ratio)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2020-07-09 13:37:51 +00:00
|
|
|
func (config *Configuration) SetShareMaxUtilization(value float64) bool {
|
2020-07-17 03:08:55 +00:00
|
|
|
config.mu.Lock()
|
|
|
|
defer config.mu.Unlock()
|
2020-07-09 13:37:51 +00:00
|
|
|
config.ShareMaxUtilization = value
|
|
|
|
log.Info("ShareMaxUtilization is set to ", value)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2020-07-22 07:27:44 +00:00
|
|
|
func (config *Configuration) SetJobMaxRetries(value int) bool {
|
|
|
|
config.mu.Lock()
|
|
|
|
defer config.mu.Unlock()
|
|
|
|
config.JobMaxRetries = value
|
|
|
|
log.Info("scheduler.job_max_retries is set to ", value)
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2020-07-02 08:58:44 +00:00
|
|
|
func (config *Configuration) Dump() map[string]interface{} {
|
2020-07-17 03:08:55 +00:00
|
|
|
config.mu.Lock()
|
|
|
|
defer config.mu.Unlock()
|
2020-07-02 08:58:44 +00:00
|
|
|
res := map[string]interface{}{}
|
|
|
|
res["KafkaBrokers"] = config.KafkaBrokers
|
|
|
|
res["KafkaTopic"] = config.KafkaTopic
|
|
|
|
res["SchedulerPolicy"] = config.SchedulerPolicy
|
|
|
|
res["ListenAddr"] = config.ListenAddr
|
|
|
|
res["Mock"] = config.mock
|
|
|
|
res["HDFSAddress"] = config.HDFSAddress
|
|
|
|
res["HDFSBaseDir"] = config.HDFSBaseDir
|
|
|
|
res["DFSBaseDir"] = config.DFSBaseDir
|
2020-07-03 13:39:40 +00:00
|
|
|
res["EnableShareRatio"] = config.EnableShareRatio
|
2020-07-06 14:17:29 +00:00
|
|
|
res["ShareMaxUtilization"] = config.ShareMaxUtilization
|
2020-07-03 13:39:40 +00:00
|
|
|
res["EnablePreScheduleRatio"] = config.EnablePreScheduleRatio
|
2020-07-06 14:17:29 +00:00
|
|
|
res["PreScheduleExtraTime"] = config.PreScheduleExtraTime
|
|
|
|
res["PreScheduleTimeout"] = config.PreScheduleTimeout
|
2020-07-17 03:08:55 +00:00
|
|
|
res["logger.level"] = log.LoggerLevel
|
|
|
|
res["logger.modules_disabled"] = log.LoggerModuleDisabled
|
2020-07-02 08:58:44 +00:00
|
|
|
return res
|
|
|
|
}
|