mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #5615 from swordqiu/hotfix/qj-service-config-change-detection
fix: refine service-config change detection
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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"`
|
||||
|
||||
|
||||
@@ -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"`
|
||||
|
||||
Reference in New Issue
Block a user