To avoid unnecessary database access, the `cacheTime` should always be
set if the revision has been checked.
Fix #28057
func (d *dbConfigCachedGetter) GetRevision(ctx context.Context) int {
d.mu.RLock()
- defer d.mu.RUnlock()
- if time.Since(d.cacheTime) < time.Second {
- return d.revision
+ cachedDuration := time.Since(d.cacheTime)
+ cachedRevision := d.revision
+ d.mu.RUnlock()
+
+ if cachedDuration < time.Second {
+ return cachedRevision
}
+
+ d.mu.Lock()
+ defer d.mu.Unlock()
if GetRevision(ctx) != d.revision {
- d.mu.RUnlock()
- d.mu.Lock()
rev, set, err := GetAllSettings(ctx)
if err != nil {
log.Error("Unable to get all settings: %v", err)
} else {
- d.cacheTime = time.Now()
d.revision = rev
d.settings = set
}
- d.mu.Unlock()
- d.mu.RLock()
}
+ d.cacheTime = time.Now()
return d.revision
}