Merge pull request #5615 from swordqiu/hotfix/qj-service-config-change-detection

fix: refine service-config change detection
This commit is contained in:
Zexi Li
2020-03-30 20:02:26 +08:00
committed by GitHub
7 changed files with 71 additions and 8 deletions
+22 -2
View File
@@ -79,13 +79,33 @@ func copyOptions(dst, src interface{}) {
dstValue.Set(reflect.ValueOf(src).Elem())
}
func optionsEquals(newOpts interface{}, oldOpts interface{}) bool {
newOptsDict := jsonutils.Marshal(newOpts).(*jsonutils.JSONDict)
oldOptsDict := jsonutils.Marshal(oldOpts).(*jsonutils.JSONDict)
deleted, diff, _, added := jsonutils.Diff(oldOptsDict, newOptsDict)
if deleted.Length() > 0 {
log.Infof("Options removed: %s", deleted)
return false
}
if diff.Length() > 0 {
log.Infof("Options changed: %s", diff)
return false
}
if added.Length() > 0 {
log.Infof("Options added: %s", added)
return false
}
return true
}
func (manager *SOptionManager) doSync(first bool) {
newOpts := manager.newOptions()
copyOptions(newOpts, manager.options)
merged := manager.session.Merge(newOpts, manager.serviceType, manager.serviceVersion)
if merged && !reflect.DeepEqual(newOpts, manager.options) {
log.Infof("Service config changed ... %s %s", jsonutils.Marshal(newOpts), jsonutils.Marshal(manager.options))
if merged && !optionsEquals(newOpts, manager.options) {
if manager.onOptionsChange != nil && manager.onOptionsChange(manager.options, newOpts) && !first {
log.Infof("Option changes detected and going to restart the program...")
appsrv.SetExitFlag()
+1 -1
View File
@@ -86,7 +86,7 @@ type BaseOptions struct {
TimeZone string `help:"time zone" default:"Asia/Shanghai"`
DomainizedNamespace bool `help:"turn on global name space, default is on" default:"false" json:"global_namespace,allowfalse"`
DomainizedNamespace bool `help:"turn on global name space, default is on" default:"false" json:"domainized_namespace,allowfalse"`
ApiServer string `help:"URL to access frontend webconsole" default:"http://webconsole.yunion.io"`
+1 -1
View File
@@ -15,7 +15,7 @@
package pending_delete
type SPendingDeleteOptions struct {
EnablePendingDelete bool `default:"true" help:"Turn on/off pending-delete resource, default is on" alias:"delayed_delete"`
EnablePendingDelete bool `default:"true" help:"Turn on/off pending-delete resource, default is on" json:"enable_pending_delete"`
PendingDeleteCheckSeconds int `default:"3600" help:"How long to wait to scan pending-delete resource, default is 1 hour"`
PendingDeleteExpireSeconds int `default:"259200" help:"How long a pending-delete resource cleaned automatically, default 3 days" alias:"scrub_time"`
PendingDeleteMaxCleanBatchSize int `default:"50" help:"How many pending-delete items can be clean in a batch"`