mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-06-21 02:26:05 +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:
2
go.mod
2
go.mod
@@ -128,7 +128,7 @@ require (
|
||||
k8s.io/cluster-bootstrap v0.17.3
|
||||
k8s.io/kubernetes v1.16.0
|
||||
yunion.io/x/executor v0.0.0-20200227030256-a18417815e74
|
||||
yunion.io/x/jsonutils v0.0.0-20200324102731-ecaf3132aad8
|
||||
yunion.io/x/jsonutils v0.0.0-20200330063846-589d9924bb8b
|
||||
yunion.io/x/log v0.0.0-20200313080802-57a4ce5966b3
|
||||
yunion.io/x/pkg v0.0.0-20200312093207-f07f4cb157e0
|
||||
yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e
|
||||
|
||||
4
go.sum
4
go.sum
@@ -1106,8 +1106,8 @@ vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj
|
||||
yunion.io/x/executor v0.0.0-20200227030256-a18417815e74 h1:A15C6VdVRWvmQ9pAJHrUs9yan5qKlYH7uaRxHg1kRbk=
|
||||
yunion.io/x/executor v0.0.0-20200227030256-a18417815e74/go.mod h1:Uxuou9WQIeJXNpy7t2fPLL0BYLvLiMvGQwY7Qc6aSws=
|
||||
yunion.io/x/jsonutils v0.0.0-20190625054549-a964e1e8a051/go.mod h1:4N0/RVzsYL3kH3WE/H1BjUQdFiWu50JGCFQuuy+Z634=
|
||||
yunion.io/x/jsonutils v0.0.0-20200324102731-ecaf3132aad8 h1:BzxFrksUauP57RDc8TW4ajkO374sqdtSVKyMKXsP8zI=
|
||||
yunion.io/x/jsonutils v0.0.0-20200324102731-ecaf3132aad8/go.mod h1:T7kxQJR13+t7z0TuT+Wzd7MTxBOk2H9c0pO1ONQSv90=
|
||||
yunion.io/x/jsonutils v0.0.0-20200330063846-589d9924bb8b h1:mt0TOKRk76yeH0whJfmKsceXBuudXLjvoj8NKGTqpEU=
|
||||
yunion.io/x/jsonutils v0.0.0-20200330063846-589d9924bb8b/go.mod h1:T7kxQJR13+t7z0TuT+Wzd7MTxBOk2H9c0pO1ONQSv90=
|
||||
yunion.io/x/log v0.0.0-20190514041436-04ce53b17c6b/go.mod h1:+gauLs73omeJAPlsXcevLsJLKixV+sR/E7WSYTSx1fE=
|
||||
yunion.io/x/log v0.0.0-20190629062853-9f6483a7103d h1:59zrDL7Ft+hDukguJRmLr/Gdu/9V75x+yX99ovZwfaA=
|
||||
yunion.io/x/log v0.0.0-20190629062853-9f6483a7103d/go.mod h1:LC6f/4FozL0iaAbnFt2eDX9jlsyo3WiOUPm03d7+U4U=
|
||||
|
||||
@@ -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"`
|
||||
|
||||
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@@ -1014,7 +1014,7 @@ sigs.k8s.io/yaml
|
||||
yunion.io/x/executor/apis
|
||||
yunion.io/x/executor/client
|
||||
yunion.io/x/executor/server
|
||||
# yunion.io/x/jsonutils v0.0.0-20200324102731-ecaf3132aad8
|
||||
# yunion.io/x/jsonutils v0.0.0-20200330063846-589d9924bb8b
|
||||
yunion.io/x/jsonutils
|
||||
# yunion.io/x/log v0.0.0-20200313080802-57a4ce5966b3
|
||||
yunion.io/x/log
|
||||
|
||||
43
vendor/yunion.io/x/jsonutils/dict.go
generated
vendored
43
vendor/yunion.io/x/jsonutils/dict.go
generated
vendored
@@ -35,3 +35,46 @@ func (dict *JSONDict) UpdateDefault(json JSONObject) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func Diff(a, b *JSONDict) (aNoB, aDiffB, aAndB, bNoA *JSONDict) {
|
||||
keysA := a.SortedKeys()
|
||||
keysB := b.SortedKeys()
|
||||
aNoB = NewDict()
|
||||
aDiffB = NewDict()
|
||||
aAndB = NewDict()
|
||||
bNoA = NewDict()
|
||||
|
||||
i := 0
|
||||
j := 0
|
||||
for i < len(keysA) || j < len(keysB) {
|
||||
if i < len(keysA) && j < len(keysB) {
|
||||
keyA := keysA[i]
|
||||
keyB := keysB[j]
|
||||
if keyA > keyB {
|
||||
aNoB.data[keyA] = a.data[keyA]
|
||||
i += 1
|
||||
} else if keyA < keyB {
|
||||
bNoA.data[keyB] = b.data[keyB]
|
||||
j += 1
|
||||
} else {
|
||||
valA := a.data[keysA[i]].String()
|
||||
valB := b.data[keysB[i]].String()
|
||||
if valA != valB {
|
||||
aDiffB.data[keyA] = NewArray(a.data[keyA], b.data[keyB])
|
||||
} else {
|
||||
aAndB.data[keyA] = a.data[keyA]
|
||||
}
|
||||
i += 1
|
||||
j += 1
|
||||
}
|
||||
} else if i < len(keysA) {
|
||||
aNoB.data[keysA[i]] = a.data[keysA[i]]
|
||||
i = i + 1
|
||||
} else if j < len(keysB) {
|
||||
bNoA.data[keysB[j]] = b.data[keysB[j]]
|
||||
j = j + 1
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user