fix: 修复分组管理内存更新消息重复发送问题

This commit is contained in:
tbphp
2025-07-11 08:36:02 +08:00
parent ca431ce3a3
commit e7f0270d82
3 changed files with 10 additions and 8 deletions

View File

@@ -118,7 +118,7 @@ func (a *App) Start() error {
}
logrus.Info("System settings initialized in DB.")
a.settingsManager.Initialize(a.storage, a.groupManager)
a.settingsManager.Initialize(a.storage, a.groupManager, a.leaderService)
// 从数据库加载密钥到 Redis
if err := a.keyPoolProvider.LoadKeysFromDB(); err != nil {
@@ -131,7 +131,7 @@ func (a *App) Start() error {
if err := a.leaderService.WaitForInitializationToComplete(); err != nil {
return fmt.Errorf("follower failed to start: %w", err)
}
a.settingsManager.Initialize(a.storage, a.groupManager)
a.settingsManager.Initialize(a.storage, a.groupManager, a.leaderService)
}
a.groupManager.Initialize()

View File

@@ -101,8 +101,12 @@ type gm interface {
Invalidate() error
}
type leader interface {
IsLeader() bool
}
// Initialize initializes the SystemSettingsManager with database and store dependencies.
func (sm *SystemSettingsManager) Initialize(store store.Store, gm gm) error {
func (sm *SystemSettingsManager) Initialize(store store.Store, gm gm, leader leader) error {
settingsLoader := func() (types.SystemSettings, error) {
var dbSettings []models.SystemSetting
if err := db.DB.Find(&dbSettings).Error; err != nil {
@@ -144,6 +148,9 @@ func (sm *SystemSettingsManager) Initialize(store store.Store, gm gm) error {
}
afterLoader := func(newData types.SystemSettings) {
if !leader.IsLeader() {
return
}
if err := gm.Invalidate(); err != nil {
logrus.Debugf("Failed to invalidate group manager cache after settings update: %v", err)
}

View File

@@ -47,11 +47,6 @@ func (gm *GroupManager) Initialize() error {
g := *group
g.EffectiveConfig = gm.settingsManager.GetEffectiveConfig(g.Config)
groupMap[g.Name] = &g
logrus.WithFields(logrus.Fields{
"group_name": g.Name,
"group_config": g.Config,
"effective_config": g.EffectiveConfig,
}).Debug("Loaded group with effective config")
}
return groupMap, nil
}