| package settings |
|
|
| import "ds2api/internal/config" |
|
|
| func validateMergedRuntimeSettings(current config.RuntimeConfig, incoming *config.RuntimeConfig) error { |
| merged := current |
| if incoming != nil { |
| if incoming.AccountMaxInflight > 0 { |
| merged.AccountMaxInflight = incoming.AccountMaxInflight |
| } |
| if incoming.AccountMaxQueue > 0 { |
| merged.AccountMaxQueue = incoming.AccountMaxQueue |
| } |
| if incoming.GlobalMaxInflight > 0 { |
| merged.GlobalMaxInflight = incoming.GlobalMaxInflight |
| } |
| if incoming.TokenRefreshIntervalHours > 0 { |
| merged.TokenRefreshIntervalHours = incoming.TokenRefreshIntervalHours |
| } |
| } |
| return validateRuntimeSettings(merged) |
| } |
|
|
| func (h *Handler) applyRuntimeSettings() { |
| if h == nil || h.Store == nil || h.Pool == nil { |
| return |
| } |
| accountCount := len(h.Store.Accounts()) |
| maxPer := h.Store.RuntimeAccountMaxInflight() |
| recommended := defaultRuntimeRecommended(accountCount, maxPer) |
| maxQueue := h.Store.RuntimeAccountMaxQueue(recommended) |
| global := h.Store.RuntimeGlobalMaxInflight(recommended) |
| h.Pool.ApplyRuntimeLimits(maxPer, maxQueue, global) |
| } |
|
|
| func defaultRuntimeRecommended(accountCount, maxPer int) int { |
| if maxPer <= 0 { |
| maxPer = 1 |
| } |
| if accountCount <= 0 { |
| return maxPer |
| } |
| return accountCount * maxPer |
| } |
|
|