Skip to content

Commit 4379871

Browse files
committed
add use serverconfig feature.
1 parent 30c026d commit 4379871

11 files changed

Lines changed: 229 additions & 36 deletions

File tree

cache/cache.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ type ProcLocationAllocFunc func(location string, addServers []*models.Server, de
2727

2828
//CacheConfigs is exported
2929
type CacheConfigs struct {
30-
LRUSize int
31-
StorageBackend types.Backend
32-
StorageParameters types.Parameters
33-
AllocHandlerFunc AllocCacheEventHandlerFunc
34-
NodeHandlerFunc NodeCacheEventHandlerFunc
35-
ReadLocationAllocFunc ReadLocationAllocFunc
36-
ProcLocationAllocFunc ProcLocationAllocFunc
30+
LRUSize int
31+
StorageBackend types.Backend
32+
StorageDriverParameters types.Parameters
33+
AllocHandlerFunc AllocCacheEventHandlerFunc
34+
NodeHandlerFunc NodeCacheEventHandlerFunc
35+
ReadLocationAllocFunc ReadLocationAllocFunc
36+
ProcLocationAllocFunc ProcLocationAllocFunc
3737
}
3838

3939
//CacheRepository is expotred
@@ -50,7 +50,7 @@ type CacheRepository struct {
5050
//NewCacheRepository is expotred
5151
func NewCacheRepository(configs *CacheConfigs) (*CacheRepository, error) {
5252

53-
storageDriver, err := driver.NewDriver(configs.StorageBackend, configs.StorageParameters)
53+
storageDriver, err := driver.NewDriver(configs.StorageBackend, configs.StorageDriverParameters)
5454
if err != nil {
5555
return nil, err
5656
}
@@ -97,6 +97,12 @@ func (cacheRepository *CacheRepository) Close() {
9797
cacheRepository.storageDriver.Close()
9898
}
9999

100+
//SetStorageDriverConfigParameters is exported
101+
func (cacheRepository *CacheRepository) SetStorageDriverConfigParameters(parameters types.Parameters) {
102+
103+
cacheRepository.storageDriver.SetConfigParameters(parameters)
104+
}
105+
100106
//Clear is expotred
101107
func (cacheRepository *CacheRepository) Clear() {
102108

cache/driver/driver.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ var (
2727
type StorageDriver interface {
2828
Open() error
2929
Close()
30+
SetConfigParameters(parameters types.Parameters)
3031
GetLocationsName() []string
3132
GetLocation(location string) *models.WorkLocation
3233
GetLocationSimpleJobs(location string) []*models.SimpleJob

cache/driver/mongo/engine.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,6 @@ func NewEngine(configs MgoConfigs) *Engine {
4646

4747
return &Engine{
4848
MgoConfigs: configs,
49-
stopCh: make(chan struct{}),
5049
}
5150
}
5251

@@ -98,6 +97,14 @@ func generateHostURL(configs MgoConfigs) (string, error) {
9897
return mgoURL, nil
9998
}
10099

100+
//SetConfigParameters is exported
101+
func (engine *Engine) SetConfigParameters(configs MgoConfigs) error {
102+
103+
engine.MgoConfigs = configs
104+
engine.Close()
105+
return engine.Open()
106+
}
107+
101108
//Open is exported
102109
func (engine *Engine) Open() error {
103110

@@ -120,14 +127,21 @@ func (engine *Engine) Open() error {
120127
session.SetMode(mgo.Strong, true)
121128
session.SetPoolLimit(maxPoolSize)
122129
engine.globalSession = session
123-
go engine.pulseSessionLoop()
130+
if engine.stopCh == nil {
131+
engine.stopCh = make(chan struct{})
132+
go engine.pulseSessionLoop()
133+
}
124134
return nil
125135
}
126136

127137
//Close is exported
128138
func (engine *Engine) Close() {
129139

130-
close(engine.stopCh)
140+
if engine.stopCh != nil {
141+
close(engine.stopCh)
142+
engine.stopCh = nil
143+
}
144+
131145
if engine.globalSession != nil {
132146
engine.globalSession.Close()
133147
}

cache/driver/mongo/mongo.go

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,18 @@ func init() {
2929
//New is exported
3030
func New(parameters types.Parameters) (driver.StorageDriver, error) {
3131

32+
mgoConfigs, err := parseEngineConfigs(parameters)
33+
if err != nil {
34+
return nil, err
35+
}
36+
37+
return &MongoStorageDriver{
38+
engine: NewEngine(mgoConfigs),
39+
}, nil
40+
}
41+
42+
func parseEngineConfigs(parameters types.Parameters) (MgoConfigs, error) {
43+
3244
var (
3345
ret bool
3446
value interface{}
@@ -41,18 +53,18 @@ func New(parameters types.Parameters) (driver.StorageDriver, error) {
4153

4254
value, ret = parameters["hosts"]
4355
if !ret {
44-
return nil, ErrMongoStorageDriverHostsInvalid
56+
return mgoConfigs, ErrMongoStorageDriverHostsInvalid
4557
}
4658
mgoConfigs.Hosts = value.(string)
4759

4860
value, ret = parameters["database"]
4961
if !ret {
50-
return nil, ErrMongoStorageDriverDataBaseInvalid
62+
return mgoConfigs, ErrMongoStorageDriverDataBaseInvalid
5163
}
5264
mgoConfigs.DataBase = value.(string)
5365

5466
if value, ret = parameters["auth"]; ret {
55-
if auth, ok := value.(map[interface{}]interface{}); ok {
67+
if auth, ok := value.(map[string]interface{}); ok {
5668
if user, ok := auth["user"]; ok {
5769
mgoConfigs.Auth["user"] = user.(string)
5870
}
@@ -69,10 +81,7 @@ func New(parameters types.Parameters) (driver.StorageDriver, error) {
6981
}
7082
}
7183
}
72-
73-
return &MongoStorageDriver{
74-
engine: NewEngine(mgoConfigs),
75-
}, nil
84+
return mgoConfigs, nil
7685
}
7786

7887
//Open is exported
@@ -87,6 +96,23 @@ func (driver *MongoStorageDriver) Close() {
8796
driver.engine.Close()
8897
}
8998

99+
//SetConfigParameters is exported
100+
func (driver *MongoStorageDriver) SetConfigParameters(parameters types.Parameters) {
101+
102+
mgoConfigs, err := parseEngineConfigs(parameters)
103+
if err != nil {
104+
logger.ERROR("[#cache#] mongo driver parse configs error, %s", err.Error())
105+
return
106+
}
107+
108+
err = driver.engine.SetConfigParameters(mgoConfigs)
109+
if err != nil {
110+
logger.ERROR("[#cache#] mongo driver set configs error, %s", err.Error())
111+
return
112+
}
113+
logger.ERROR("[#cache#] mongo driver configs changed, %+v", mgoConfigs)
114+
}
115+
90116
//GetLocationsName is exported
91117
func (driver *MongoStorageDriver) GetLocationsName() []string {
92118

cache/driver/ngcloud/engine.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,12 @@ func NewEngine(rawAPIURL string, readPageSize int) *Engine {
4545
}
4646
}
4747

48+
func (engine *Engine) SetConfigParameters(rawAPIURL string, readPageSize int) {
49+
50+
engine.rawAPIURL = rawAPIURL
51+
engine.readPageSize = readPageSize
52+
}
53+
4854
func (engine *Engine) getLocation(location string) (*models.WorkLocation, error) {
4955

5056
respData, err := engine.client.Get(context.Background(), engine.rawAPIURL+"/sys_locations/"+location, nil, nil)

cache/driver/ngcloud/ngcloud.go

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ func init() {
3535
//New is exported
3636
func New(parameters types.Parameters) (driver.StorageDriver, error) {
3737

38+
rawAPIURL, readPageSize, err := parseEngineConfigs(parameters)
39+
if err != nil {
40+
return nil, err
41+
}
42+
43+
return &NgCloudStorageDriver{
44+
engine: NewEngine(rawAPIURL, readPageSize),
45+
}, nil
46+
}
47+
48+
func parseEngineConfigs(parameters types.Parameters) (string, int, error) {
49+
3850
var (
3951
value interface{}
4052
ret bool
@@ -52,23 +64,24 @@ func New(parameters types.Parameters) (driver.StorageDriver, error) {
5264

5365
value, ret = parameters["apiurl"]
5466
if !ret {
55-
return nil, ErrNgCloudStorageDriverURLInvalid
67+
return "", 0, ErrNgCloudStorageDriverURLInvalid
5668
}
5769

5870
pRawURL, err := url.Parse(value.(string))
5971
if err != nil {
60-
return nil, ErrNgCloudStorageDriverURLInvalid
72+
return "", 0, ErrNgCloudStorageDriverURLInvalid
6173
}
6274

6375
scheme := pRawURL.Scheme
6476
if scheme == "" {
6577
scheme = "http"
6678
}
6779

68-
rawAPIURL = scheme + "://" + pRawURL.Host + path.Clean(pRawURL.Path) + "?" + pRawURL.RawQuery
69-
return &NgCloudStorageDriver{
70-
engine: NewEngine(rawAPIURL, readPageSize),
71-
}, nil
80+
rawAPIURL = scheme + "://" + pRawURL.Host + path.Clean(pRawURL.Path)
81+
if pRawURL.RawQuery != "" {
82+
rawAPIURL = rawAPIURL + "?" + pRawURL.RawQuery
83+
}
84+
return rawAPIURL, readPageSize, nil
7285
}
7386

7487
//Open is exported
@@ -81,6 +94,18 @@ func (driver *NgCloudStorageDriver) Open() error {
8194
func (driver *NgCloudStorageDriver) Close() {
8295
}
8396

97+
//SetConfigParameters is exported
98+
func (driver *NgCloudStorageDriver) SetConfigParameters(parameters types.Parameters) {
99+
100+
rawAPIURL, readPageSize, err := parseEngineConfigs(parameters)
101+
if err != nil {
102+
logger.ERROR("[#cache#] ngcloud driver parse configs error, %s", err.Error())
103+
return
104+
}
105+
driver.engine.SetConfigParameters(rawAPIURL, readPageSize)
106+
logger.ERROR("[#cache#] ngcloud driver configs changed, %s %s", rawAPIURL, readPageSize)
107+
}
108+
84109
//GetLocationsName is exported
85110
func (driver *NgCloudStorageDriver) GetLocationsName() []string {
86111

etc/configuration.go

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import "github.com/cloudtask/cloudtask-center/scheduler"
77
import "github.com/cloudtask/libtools/gounits/logger"
88
import "github.com/cloudtask/libtools/gounits/system"
99
import "github.com/cloudtask/libtools/gzkwrapper"
10+
import "github.com/cloudtask/common/models"
1011
import "gopkg.in/yaml.v2"
1112

1213
import (
@@ -17,10 +18,12 @@ import (
1718
"os"
1819
"path/filepath"
1920
"strconv"
21+
"sync"
2022
)
2123

2224
var (
23-
SystemConfig *Configuration = nil
25+
SystemConfig *Configuration = nil
26+
ServerConfig *models.ServerConfig = nil
2427
)
2528

2629
var (
@@ -32,9 +35,11 @@ var (
3235

3336
// Configuration is exported
3437
type Configuration struct {
35-
Version string `yaml:"version" json:"version"`
36-
PidFile string `yaml:"pidfile" json:"pidfile"`
37-
RetryStartup bool `yaml:"retrystartup" json:"retrystartup"`
38+
sync.RWMutex
39+
Version string `yaml:"version" json:"version"`
40+
PidFile string `yaml:"pidfile" json:"pidfile"`
41+
RetryStartup bool `yaml:"retrystartup" json:"retrystartup"`
42+
UseServerConfig bool `yaml:"useserverconfig" json:"useserverconfig"`
3843

3944
Cluster struct {
4045
Hosts string `yaml:"hosts" json:"hosts"`
@@ -60,7 +65,7 @@ type Configuration struct {
6065

6166
Cache struct {
6267
LRUSize int `yaml:"lrusize" json:"lrusize"`
63-
types.StorageDriverConfigs `yaml:"storage" json:"storage"`
68+
types.StorageDriverConfigs `yaml:"storagedriver" json:"storagedriver"`
6469
} `yaml:"cache" json:"cache"`
6570

6671
Notifications notify.Notifications `yaml:"notifications" json:"notifications"`
@@ -94,7 +99,10 @@ func New(file string) error {
9499
return fmt.Errorf("config read %s", err.Error())
95100
}
96101

97-
conf := &Configuration{RetryStartup: true}
102+
conf := &Configuration{
103+
RetryStartup: true,
104+
UseServerConfig: true,
105+
}
98106
if err := yaml.Unmarshal(buf, conf); err != nil {
99107
return ErrConfigFormatInvalid
100108
}
@@ -108,6 +116,7 @@ func New(file string) error {
108116
log.Printf("[#etc#] version: %s\n", SystemConfig.Version)
109117
log.Printf("[#etc#] pidfile: %s\n", SystemConfig.PidFile)
110118
log.Printf("[#etc#] retrystartup: %s\n", strconv.FormatBool(SystemConfig.RetryStartup))
119+
log.Printf("[#etc#] useserverconfig: %s\n", strconv.FormatBool(SystemConfig.UseServerConfig))
111120
log.Printf("[#etc#] cluster: %+v\n", SystemConfig.Cluster)
112121
log.Printf("[#etc#] APIlisten: %+v\n", SystemConfig.API)
113122
log.Printf("[#etc#] scheduler: %+v\n", SystemConfig.Scheduler)
@@ -116,6 +125,28 @@ func New(file string) error {
116125
return nil
117126
}
118127

128+
//SaveServerConfig is exported
129+
func SaveServerConfig(data []byte) error {
130+
131+
if SystemConfig != nil {
132+
value, err := models.ParseServerConfigs(data)
133+
if err != nil {
134+
return err
135+
}
136+
SystemConfig.Lock()
137+
ServerConfig = value
138+
if value, ok := ServerConfig.StorageDriver.(map[string]interface{}); ok {
139+
SystemConfig.Cache.StorageDriverConfigs = make(types.StorageDriverConfigs)
140+
for backend, paramters := range value {
141+
SystemConfig.Cache.StorageDriverConfigs[backend] = paramters.(map[string]interface{})
142+
break
143+
}
144+
}
145+
SystemConfig.Unlock()
146+
}
147+
return nil
148+
}
149+
119150
//PidFile is exported
120151
func PidFile() string {
121152

@@ -134,6 +165,15 @@ func RetryStartup() bool {
134165
return false
135166
}
136167

168+
//UseServerConfig is exported
169+
func UseServerConfig() bool {
170+
171+
if SystemConfig != nil {
172+
return SystemConfig.UseServerConfig
173+
}
174+
return false
175+
}
176+
137177
//SchedulerConfigs is exported
138178
func SchedulerConfigs() *scheduler.SchedulerConfigs {
139179

@@ -186,7 +226,7 @@ func CacheConfigs() *cache.CacheConfigs {
186226
}
187227
for backend, paramters := range SystemConfig.Cache.StorageDriverConfigs {
188228
configs.StorageBackend = types.Backend(backend)
189-
configs.StorageParameters = paramters
229+
configs.StorageDriverParameters = paramters
190230
break
191231
}
192232
}

0 commit comments

Comments
 (0)