Skip to content

Commit 2d4280e

Browse files
ethervoidpstibrany
andcommitted
Refactor and improvement of the runtime config diff
Co-authored-by: Peter Štibraný <pstibrany@gmail.com> Signed-off-by: Mario de Frutos <mario@defrutos.org>
1 parent 411ab8a commit 2d4280e

File tree

1 file changed

+27
-57
lines changed

1 file changed

+27
-57
lines changed

pkg/cortex/runtime_config.go

Lines changed: 27 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -85,77 +85,47 @@ func multiClientRuntimeConfigChannel(manager *runtimeconfig.Manager) func() <-ch
8585
return outCh
8686
}
8787
}
88-
89-
func diffLimitsConfig(defaultConfig, actualConfig map[interface{}]interface{}) (map[interface{}]interface{}, error) {
90-
output := make(map[interface{}]interface{})
91-
for tenant, tenantValues := range actualConfig {
92-
tenantValuesObj, err := util.YAMLMarshalUnmarshal(tenantValues)
93-
if err != nil {
94-
return nil, err
95-
}
96-
tenantDiff, err := util.DiffConfig(defaultConfig, tenantValuesObj)
97-
if err != nil {
98-
return nil, err
99-
}
100-
output[tenant] = tenantDiff
101-
}
102-
return output, nil
103-
}
104-
10588
func runtimeConfigHandler(runtimeCfgManager *runtimeconfig.Manager, defaultLimits validation.Limits) http.HandlerFunc {
10689
return func(w http.ResponseWriter, r *http.Request) {
107-
var output interface{}
108-
runtimeConfig := runtimeCfgManager.GetConfig()
109-
if runtimeConfig == nil {
90+
cfg, ok := runtimeCfgManager.GetConfig().(*runtimeConfigValues)
91+
if !ok || cfg == nil {
11092
util.WriteTextResponse(w, "runtime config file doesn't exist")
11193
return
11294
}
95+
96+
var output interface{}
11397
switch r.URL.Query().Get("mode") {
11498
case "diff":
115-
runtimeCfgObj, err := util.YAMLMarshalUnmarshal(runtimeConfig)
99+
// Default runtime config is just empty struct, but to make diff work,
100+
// we set defaultLimits for every tenant that exists in runtime config.
101+
defaultCfg := runtimeConfigValues{}
102+
defaultCfg.TenantLimits = map[string]*validation.Limits{}
103+
for k, v := range cfg.TenantLimits {
104+
if v != nil {
105+
defaultCfg.TenantLimits[k] = &defaultLimits
106+
}
107+
}
108+
109+
cfgYaml, err := util.YAMLMarshalUnmarshal(cfg)
116110
if err != nil {
117111
http.Error(w, err.Error(), http.StatusInternalServerError)
118112
return
119113
}
120-
if runtimeCfgObj["overrides"] != nil {
121-
defaultLimitsObj, err := util.YAMLMarshalUnmarshal(defaultLimits)
122-
if err != nil {
123-
http.Error(w, err.Error(), http.StatusInternalServerError)
124-
return
125-
}
126-
limitsCfgObj, err := util.YAMLMarshalUnmarshal(runtimeCfgObj["overrides"])
127-
if err != nil {
128-
http.Error(w, err.Error(), http.StatusInternalServerError)
129-
return
130-
}
131-
limitsDiff, err := diffLimitsConfig(defaultLimitsObj, limitsCfgObj)
132-
if err != nil {
133-
http.Error(w, err.Error(), http.StatusInternalServerError)
134-
return
135-
}
136-
runtimeCfgObj["overrides"] = limitsDiff
114+
115+
defaultCfgYaml, err := util.YAMLMarshalUnmarshal(defaultCfg)
116+
if err != nil {
117+
http.Error(w, err.Error(), http.StatusInternalServerError)
118+
return
137119
}
138-
if runtimeCfgObj["multi_kv_config"] != nil {
139-
defaultMultiKVObj, err := util.YAMLMarshalUnmarshal(&kv.MultiRuntimeConfig{})
140-
if err != nil {
141-
http.Error(w, err.Error(), http.StatusInternalServerError)
142-
return
143-
}
144-
multiKVCfgObj, err := util.YAMLMarshalUnmarshal(runtimeCfgObj["multi_kv_config"])
145-
if err != nil {
146-
http.Error(w, err.Error(), http.StatusInternalServerError)
147-
return
148-
}
149-
multKVDiff, err := util.DiffConfig(defaultMultiKVObj, multiKVCfgObj)
150-
if err != nil {
151-
http.Error(w, err.Error(), http.StatusInternalServerError)
152-
return
153-
}
154-
runtimeCfgObj["multi_kv_config"] = multKVDiff
120+
121+
output, err = util.DiffConfig(defaultCfgYaml, cfgYaml)
122+
if err != nil {
123+
http.Error(w, err.Error(), http.StatusInternalServerError)
124+
return
155125
}
156-
output = runtimeCfgObj
126+
157127
default:
158-
output = runtimeConfig
128+
output = cfg
159129
}
160130
util.WriteYAMLResponse(w, output)
161131
}

0 commit comments

Comments
 (0)