fix(config): fix default values not applied

This commit is contained in:
yusing
2025-12-16 11:55:47 +08:00
parent 57d229f94b
commit 3873e2860b
5 changed files with 26 additions and 4 deletions

View File

@@ -52,11 +52,16 @@ func logNotifyWarn(action string, err error) {
}) })
} }
var nilState *state
func Load() error { func Load() error {
if HasState() { if HasState() {
panic(errors.New("config already loaded")) panic(errors.New("config already loaded"))
} }
state := NewState() state := NewState()
config.WorkingState.Store(state)
defer config.WorkingState.Store(nilState)
cfgWatcher = watcher.NewConfigFileWatcher(common.ConfigFileName) cfgWatcher = watcher.NewConfigFileWatcher(common.ConfigFileName)
initErr := state.InitFromFile(common.ConfigPath) initErr := state.InitFromFile(common.ConfigPath)
@@ -82,6 +87,9 @@ func Reload() gperr.Error {
defer reloadMu.Unlock() defer reloadMu.Unlock()
newState := NewState() newState := NewState()
config.WorkingState.Store(newState)
defer config.WorkingState.Store(nilState)
err := newState.InitFromFile(common.ConfigPath) err := newState.InitFromFile(common.ConfigPath)
if err != nil { if err != nil {
newState.Task().FinishAndWait(err) newState.Task().FinishAndWait(err)

View File

@@ -33,7 +33,10 @@ type State interface {
FlushTmpLog() FlushTmpLog()
} }
// could be nil // could be nil before first call on Load
var ActiveState synk.Value[State] var ActiveState synk.Value[State]
// nil-safe while loading config, nil otherwise
var WorkingState synk.Value[State]
var ErrConfigChanged = errors.New("config changed") var ErrConfigChanged = errors.New("config changed")

View File

@@ -775,7 +775,7 @@ func (r *Route) Finalize() {
} }
r.Port.Listening, r.Port.Proxy = lp, pp r.Port.Listening, r.Port.Proxy = lp, pp
r.HealthCheck.ApplyDefaults(config.ActiveConfig.Load().Defaults.HealthCheck) r.HealthCheck.ApplyDefaults(config.WorkingState.Load().Value().Defaults.HealthCheck)
} }
func (r *Route) FinalizeHomepageConfig() { func (r *Route) FinalizeHomepageConfig() {

View File

@@ -36,6 +36,9 @@ func (hc *HealthCheckConfig) ApplyDefaults(defaults HealthCheckConfig) {
} }
} }
if hc.Retries == 0 { if hc.Retries == 0 {
hc.Retries = int64(HealthCheckDownNotifyDelayDefault / hc.Interval) hc.Retries = defaults.Retries
if hc.Retries == 0 {
hc.Retries = max(1, int64(HealthCheckDownNotifyDelayDefault/hc.Interval))
}
} }
} }

View File

@@ -74,7 +74,15 @@ func NewMonitor(r types.Route) types.HealthMonCheck {
} }
func newMonitor(u *url.URL, cfg types.HealthCheckConfig, healthCheckFunc HealthCheckFunc) *monitor { func newMonitor(u *url.URL, cfg types.HealthCheckConfig, healthCheckFunc HealthCheckFunc) *monitor {
cfg.ApplyDefaults(config.DefaultConfig().Defaults.HealthCheck) state := config.WorkingState.Load()
if state == nil {
state = config.ActiveState.Load()
}
if state != nil {
cfg.ApplyDefaults(state.Value().Defaults.HealthCheck)
} else {
cfg.ApplyDefaults(types.HealthCheckConfig{}) // use config defaults
}
mon := &monitor{ mon := &monitor{
config: cfg, config: cfg,
checkHealth: healthCheckFunc, checkHealth: healthCheckFunc,