mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 04:50:52 +08:00
fix(watcher): Prevent infinite reload loop on rapid config changes
This commit is contained in:
@@ -430,8 +430,15 @@ func (w *Watcher) handleEvent(event fsnotify.Event) {
|
|||||||
}
|
}
|
||||||
fmt.Printf("config file changed, reloading: %s\n", w.configPath)
|
fmt.Printf("config file changed, reloading: %s\n", w.configPath)
|
||||||
if w.reloadConfig() {
|
if w.reloadConfig() {
|
||||||
|
finalHash := newHash
|
||||||
|
if updatedData, errRead := os.ReadFile(w.configPath); errRead == nil && len(updatedData) > 0 {
|
||||||
|
sumUpdated := sha256.Sum256(updatedData)
|
||||||
|
finalHash = hex.EncodeToString(sumUpdated[:])
|
||||||
|
} else if errRead != nil {
|
||||||
|
log.WithError(errRead).Debug("failed to compute updated config hash after reload")
|
||||||
|
}
|
||||||
w.clientsMutex.Lock()
|
w.clientsMutex.Lock()
|
||||||
w.lastConfigHash = newHash
|
w.lastConfigHash = finalHash
|
||||||
w.clientsMutex.Unlock()
|
w.clientsMutex.Unlock()
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@@ -533,7 +540,14 @@ func (w *Watcher) reloadConfig() bool {
|
|||||||
log.Debugf(" remote-management.allow-remote: %t -> %t", oldConfig.RemoteManagement.AllowRemote, newConfig.RemoteManagement.AllowRemote)
|
log.Debugf(" remote-management.allow-remote: %t -> %t", oldConfig.RemoteManagement.AllowRemote, newConfig.RemoteManagement.AllowRemote)
|
||||||
}
|
}
|
||||||
if oldConfig.RemoteManagement.SecretKey != newConfig.RemoteManagement.SecretKey {
|
if oldConfig.RemoteManagement.SecretKey != newConfig.RemoteManagement.SecretKey {
|
||||||
log.Debug(" remote-management.secret-key: updated")
|
switch {
|
||||||
|
case oldConfig.RemoteManagement.SecretKey == "" && newConfig.RemoteManagement.SecretKey != "":
|
||||||
|
log.Debug(" remote-management.secret-key: created")
|
||||||
|
case oldConfig.RemoteManagement.SecretKey != "" && newConfig.RemoteManagement.SecretKey == "":
|
||||||
|
log.Debug(" remote-management.secret-key: deleted")
|
||||||
|
default:
|
||||||
|
log.Debug(" remote-management.secret-key: updated")
|
||||||
|
}
|
||||||
if newConfig.RemoteManagement.SecretKey == "" {
|
if newConfig.RemoteManagement.SecretKey == "" {
|
||||||
log.Info("management routes will be disabled after secret key removal")
|
log.Info("management routes will be disabled after secret key removal")
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user