Template
1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo synced 2024-11-29 21:26:10 +01:00

Fix system config cache expiration timing (#28072) (#28090)

Backport #28072

To avoid unnecessary database access, the `cacheTime` should always be
set if the revision has been checked.

Fix #28057

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
(cherry picked from commit 9f63d27ec4)
This commit is contained in:
Giteabot 2023-11-16 21:37:57 +08:00 committed by Earl Warren
parent c51dd2b4fd
commit 1eb83ea8cc
No known key found for this signature in database
GPG key ID: 0579CB2928A78A00

View file

@ -115,24 +115,26 @@ func (d *dbConfigCachedGetter) GetValue(ctx context.Context, key string) (v stri
func (d *dbConfigCachedGetter) GetRevision(ctx context.Context) int { func (d *dbConfigCachedGetter) GetRevision(ctx context.Context) int {
d.mu.RLock() d.mu.RLock()
defer d.mu.RUnlock() cachedDuration := time.Since(d.cacheTime)
if time.Since(d.cacheTime) < time.Second { cachedRevision := d.revision
return d.revision
}
if GetRevision(ctx) != d.revision {
d.mu.RUnlock() d.mu.RUnlock()
if cachedDuration < time.Second {
return cachedRevision
}
d.mu.Lock() d.mu.Lock()
defer d.mu.Unlock()
if GetRevision(ctx) != d.revision {
rev, set, err := GetAllSettings(ctx) rev, set, err := GetAllSettings(ctx)
if err != nil { if err != nil {
log.Error("Unable to get all settings: %v", err) log.Error("Unable to get all settings: %v", err)
} else { } else {
d.cacheTime = time.Now()
d.revision = rev d.revision = rev
d.settings = set d.settings = set
} }
d.mu.Unlock()
d.mu.RLock()
} }
d.cacheTime = time.Now()
return d.revision return d.revision
} }