@@ -85,77 +85,47 @@ func multiClientRuntimeConfigChannel(manager *runtimeconfig.Manager) func() <-ch
85
85
return outCh
86
86
}
87
87
}
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
-
105
88
func runtimeConfigHandler (runtimeCfgManager * runtimeconfig.Manager , defaultLimits validation.Limits ) http.HandlerFunc {
106
89
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 {
110
92
util .WriteTextResponse (w , "runtime config file doesn't exist" )
111
93
return
112
94
}
95
+
96
+ var output interface {}
113
97
switch r .URL .Query ().Get ("mode" ) {
114
98
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 )
116
110
if err != nil {
117
111
http .Error (w , err .Error (), http .StatusInternalServerError )
118
112
return
119
113
}
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
137
119
}
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
155
125
}
156
- output = runtimeCfgObj
126
+
157
127
default :
158
- output = runtimeConfig
128
+ output = cfg
159
129
}
160
130
util .WriteYAMLResponse (w , output )
161
131
}
0 commit comments