Skip to content

Commit

Permalink
core: Config load interval only reloads if changed (#4603)
Browse files Browse the repository at this point in the history
  • Loading branch information
YourTechBud authored Mar 1, 2022
1 parent 186fdba commit 7ea5b2a
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions caddy.go
Original file line number Diff line number Diff line change
Expand Up @@ -481,11 +481,23 @@ func finishSettingUp(ctx Context, cfg *Config) error {
return fmt.Errorf("loading config loader module: %s", err)
}
runLoadedConfig := func(config []byte) {
Log().Info("applying dynamically-loaded config", zap.String("loader_module", val.(Module).CaddyModule().ID.Name()), zap.Int("pull_interval", int(cfg.Admin.Config.LoadInterval)))
currentCfgMu.Lock()
defer currentCfgMu.Unlock()

// Skip if there is no change in the config
if bytes.Equal(rawCfgJSON, config) {
return
}

Log().Info("applying dynamically-loaded config", zap.String("loader_module", val.(Module).CaddyModule().ID.Name()), zap.Int("pull_interval", int(cfg.Admin.Config.LoadInterval)))
err := unsyncedDecodeAndRun(config, false)
currentCfgMu.Unlock()
if err == nil {
// success, so update our stored copy of the encoded
// config to keep it consistent with what caddy is now
// running (storing an encoded copy is not strictly
// necessary, but avoids an extra json.Marshal for
// each config change)
rawCfgJSON = config
Log().Info("dynamically-loaded config applied successfully")
} else {
Log().Error("running dynamically-loaded config failed", zap.Error(err))
Expand All @@ -503,6 +515,7 @@ func finishSettingUp(ctx Context, cfg *Config) error {
Log().Error("loading dynamic config failed", zap.Error(err))
return
}

runLoadedConfig(loadedConfig)
case <-ctx.Done():
if !timer.Stop() {
Expand Down

0 comments on commit 7ea5b2a

Please sign in to comment.