Skip to content

Commit b791330

Browse files
authored
koord-manager: fix node slo extension got overwriten (#1552)
Signed-off-by: 佑祎 <zzw261520@alibaba-inc.com>
1 parent 4d28dbc commit b791330

File tree

5 files changed

+28
-13
lines changed

5 files changed

+28
-13
lines changed

pkg/slo-controller/nodeslo/extender_config_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import (
2929

3030
func getDefaultExtensionStrategy() *slov1alpha1.ExtensionsMap {
3131
defaultCfg := getDefaultExtensionCfg()
32-
defaultStrategy := slov1alpha1.ExtensionsMap{}
32+
defaultStrategy := slov1alpha1.ExtensionsMap{Object: map[string]interface{}{}}
3333
if defaultCfg == nil || defaultCfg.Object == nil {
3434
return &defaultStrategy
3535
}

pkg/slo-controller/nodeslo/extender_plugin.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,13 @@ func calculateExtensionsCfgMerged(oldCfgMap configuration.ExtensionCfgMap, confi
6262
return mergedCfgMap
6363
}
6464

65-
func getExtensionsConfigSpec(node *corev1.Node, cfgMap *configuration.ExtensionCfgMap) *slov1alpha1.ExtensionsMap {
66-
extMap := slov1alpha1.ExtensionsMap{}
65+
func getExtensionsConfigSpec(node *corev1.Node, oldSpec *slov1alpha1.NodeSLOSpec, cfgMap *configuration.ExtensionCfgMap) *slov1alpha1.ExtensionsMap {
66+
extMap := &slov1alpha1.ExtensionsMap{Object: map[string]interface{}{}}
67+
if oldSpec != nil && oldSpec.Extensions != nil && oldSpec.Extensions.Object != nil {
68+
extMap = oldSpec.Extensions.DeepCopy()
69+
}
6770
if cfgMap == nil || cfgMap.Object == nil {
68-
return &extMap
71+
return extMap
6972
}
7073
for name, extender := range globalNodeSLOMergedExtender {
7174
extKey, extStrategy, err := extender.GetNodeSLOExtension(node, cfgMap)
@@ -75,16 +78,14 @@ func getExtensionsConfigSpec(node *corev1.Node, cfgMap *configuration.ExtensionC
7578
continue
7679
}
7780
if extStrategy == nil {
78-
continue
79-
}
80-
if extMap.Object == nil {
81-
extMap.Object = make(map[string]interface{})
81+
delete(extMap.Object, extKey)
82+
} else {
83+
extMap.Object[extKey] = extStrategy
8284
}
83-
extMap.Object[extKey] = extStrategy
8485
metrics.RecordNodeSLOSpecParseCount(true, "getNodeSLOExtension")
8586
klog.V(5).Infof("run get nodeSLO extender %v success, extMap %v", name, extMap)
8687
}
87-
return &extMap
88+
return extMap
8889
}
8990

9091
func UnregisterNodeSLOMergedExtender(name string) {

pkg/slo-controller/nodeslo/extender_plugin_test.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"k8s.io/client-go/tools/record"
2626

2727
"github.com/koordinator-sh/koordinator/apis/configuration"
28+
slov1alpha1 "github.com/koordinator-sh/koordinator/apis/slo/v1alpha1"
2829
)
2930

3031
const (
@@ -62,18 +63,31 @@ func Test_NodeMergedExtender(t *testing.T) {
6263
testExtKey: testExtIF,
6364
},
6465
}
66+
oldOtherExtKey := "old-other-ext-key"
67+
oldOtherExtVal := "old-other-ext-val"
68+
oldSpec := &slov1alpha1.NodeSLOSpec{
69+
Extensions: &slov1alpha1.ExtensionsMap{
70+
Object: map[string]interface{}{
71+
oldOtherExtKey: oldOtherExtVal,
72+
},
73+
},
74+
}
6575
node := &corev1.Node{
6676
ObjectMeta: metav1.ObjectMeta{
6777
Labels: map[string]string{},
6878
},
6979
}
7080
cfgMap := configuration.ExtensionCfgMap{}
7181
newCfg := calculateExtensionsCfgMerged(cfgMap, configMap, &record.FakeRecorder{})
72-
extMap := getExtensionsConfigSpec(node, &newCfg)
82+
extMap := getExtensionsConfigSpec(node, oldSpec, &newCfg)
7383
gotIf := extMap.Object[testExtKey].(string)
7484
if gotIf != testExtIF {
7585
t.Errorf("run NodeMergedExtender got ext key %s, want %s", gotIf, testExtIF)
7686
}
87+
gotOtherIf := extMap.Object[oldOtherExtKey].(string)
88+
if gotOtherIf != oldOtherExtVal {
89+
t.Errorf("run NodeMergedExtender got other ext key %s, want %s", gotOtherIf, oldOtherExtVal)
90+
}
7791
UnregisterNodeSLOMergedExtender(pluginName)
7892
})
7993
}

pkg/slo-controller/nodeslo/nodeslo_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func (r *NodeSLOReconciler) getNodeSLOSpec(node *corev1.Node, oldSpec *slov1alph
107107
metrics.RecordNodeSLOSpecParseCount(true, "getSystemConfigSpec")
108108
}
109109

110-
nodeSLOSpec.Extensions = getExtensionsConfigSpec(node, &sloCfg.ExtensionCfgMerged)
110+
nodeSLOSpec.Extensions = getExtensionsConfigSpec(node, oldSpec, &sloCfg.ExtensionCfgMerged)
111111

112112
return nodeSLOSpec, nil
113113
}

pkg/slo-controller/nodeslo/nodeslo_controller_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import (
4343
// plugins in koordlet/resmanager will get the interface and
4444
// change it to strategy individually
4545
func getExtensionsIfMap(in slov1alpha1.ExtensionsMap) (*slov1alpha1.ExtensionsMap, error) {
46-
extensionsMap := &slov1alpha1.ExtensionsMap{}
46+
extensionsMap := &slov1alpha1.ExtensionsMap{Object: map[string]interface{}{}}
4747
for extkey, extIf := range in.Object {
4848
//marshal unmarshal to
4949
extStr, err := json.Marshal(extIf)

0 commit comments

Comments
 (0)