summaryrefslogtreecommitdiff
path: root/caddy.go
diff options
context:
space:
mode:
authorNoorain Panjwani <noorain.panjwani@gmail.com>2022-03-02 00:02:33 +0530
committerGitHub <noreply@github.com>2022-03-01 11:32:33 -0700
commit7ea5b2a818ff56f650c537be83c4230166f90a14 (patch)
tree0dcc35ee45b628279c66c5cf16464d2b4947132d /caddy.go
parent186fdba916a128fc2a837852d2ab04ac2efba413 (diff)
core: Config load interval only reloads if changed (#4603)
Diffstat (limited to 'caddy.go')
-rw-r--r--caddy.go17
1 files changed, 15 insertions, 2 deletions
diff --git a/caddy.go b/caddy.go
index f990d36..aa3a705 100644
--- a/caddy.go
+++ b/caddy.go
@@ -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))
@@ -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() {