MCPcopy Index your code
hub / github.com/cortexproject/cortex / setOverridesToBucket

Method setOverridesToBucket

pkg/overrides/api.go:204–259  ·  view source on GitHub ↗

setOverridesToBucket writes overrides for a specific tenant to the runtime config file

(ctx context.Context, userID string, overrides map[string]any)

Source from the content-addressed store, hash-verified

202
203// setOverridesToBucket writes overrides for a specific tenant to the runtime config file
204func (a *API) setOverridesToBucket(ctx context.Context, userID string, overrides map[string]any) error {
205 var config runtimeconfig.RuntimeConfigValues
206 reader, err := a.bucketClient.Get(ctx, a.runtimeConfigPath)
207 if err != nil {
208 return fmt.Errorf("failed to get runtime config: %w", err)
209 }
210 defer func() {
211 if reader != nil {
212 reader.Close()
213 }
214 }()
215 if err := yaml.NewDecoder(reader).Decode(&config); err != nil {
216 return fmt.Errorf("%s: %w", ErrRuntimeConfig, err)
217 }
218
219 if config.TenantLimits == nil {
220 config.TenantLimits = make(map[string]*validation.Limits)
221 }
222
223 // Get existing limits for the user
224 var existingLimitsMap map[string]any
225 if existingLimits, exists := config.TenantLimits[userID]; exists && existingLimits != nil {
226 // Convert existing limits to map
227 yamlData, err := yaml.Marshal(existingLimits)
228 if err != nil {
229 return fmt.Errorf("failed to marshal existing limits: %w", err)
230 }
231
232 if err := yaml.Unmarshal(yamlData, &existingLimitsMap); err != nil {
233 return fmt.Errorf("failed to unmarshal existing limits: %w", err)
234 }
235 }
236
237 // Merge existing limits with new overrides
238 mergedLimits := mergeLimits(existingLimitsMap, overrides)
239
240 // Convert merged limits back to validation.Limits
241 yamlData, err := yaml.Marshal(mergedLimits)
242 if err != nil {
243 return fmt.Errorf("failed to marshal overrides: %w", err)
244 }
245
246 var limits validation.Limits
247 if err := yaml.Unmarshal(yamlData, &limits); err != nil {
248 return fmt.Errorf("invalid overrides format: %w", err)
249 }
250
251 config.TenantLimits[userID] = &limits
252
253 data, err := yaml.Marshal(config)
254 if err != nil {
255 return fmt.Errorf("%s: %w", ErrRuntimeConfig, err)
256 }
257
258 return a.bucketClient.Upload(ctx, a.runtimeConfigPath, bytes.NewReader(data))
259}
260
261// deleteOverridesFromBucket removes overrides for a specific tenant from the runtime config file

Callers 1

SetOverridesMethod · 0.95

Calls 7

mergeLimitsFunction · 0.85
GetMethod · 0.65
CloseMethod · 0.65
DecodeMethod · 0.65
MarshalMethod · 0.45
UnmarshalMethod · 0.45
UploadMethod · 0.45

Tested by

no test coverage detected