GetSettings reloads disk-backed routing rules opportunistically so a long-lived lifecycle manager picks up saved settings changes without a restart.
()
| 132 | // GetSettings reloads disk-backed routing rules opportunistically so a long-lived |
| 133 | // lifecycle manager picks up saved settings changes without a restart. |
| 134 | func (m *LifecycleManager) GetSettings() *config.Settings { |
| 135 | m.settingsMu.RLock() |
| 136 | settings := m.settings |
| 137 | refreshedAt := m.settingsRefreshedAt |
| 138 | m.settingsMu.RUnlock() |
| 139 | |
| 140 | if settings != nil && time.Since(refreshedAt) < settingsRefreshTTL { |
| 141 | return settings |
| 142 | } |
| 143 | |
| 144 | m.settingsMu.Lock() |
| 145 | defer m.settingsMu.Unlock() |
| 146 | |
| 147 | // Double-check condition to prevent redundant disk reads under concurrent load |
| 148 | if m.settings != nil && time.Since(m.settingsRefreshedAt) < settingsRefreshTTL { |
| 149 | return m.settings |
| 150 | } |
| 151 | |
| 152 | if loaded, err := config.LoadSettings(); err == nil && loaded != nil { |
| 153 | m.settings = loaded |
| 154 | m.settingsRefreshedAt = time.Now() |
| 155 | return loaded |
| 156 | } |
| 157 | |
| 158 | if m.settings == nil { |
| 159 | return config.DefaultSettings() |
| 160 | } |
| 161 | return m.settings |
| 162 | } |
| 163 | |
| 164 | // ApplySettings swaps in a new routing snapshot for future enqueue calls. |
| 165 | func (m *LifecycleManager) ApplySettings(s *config.Settings) { |