Gradually evict oldest cache entries

This commit is contained in:
Neil Alexander 2021-02-17 12:59:56 +00:00
parent 5d74a1757f
commit 2b4162523f
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944

View file

@ -2,6 +2,7 @@ package caching
import (
"fmt"
"time"
lru "github.com/hashicorp/golang-lru"
"github.com/prometheus/client_golang/prometheus"
@ -72,6 +73,11 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) {
if err != nil {
return nil, err
}
go cacheCleaner(
roomVersions, serverKeys, roomServerStateKeyNIDs,
roomServerEventTypeNIDs, roomServerRoomIDs,
roomInfos, federationEvents,
)
return &Caches{
RoomVersions: roomVersions,
ServerKeys: serverKeys,
@ -83,6 +89,15 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) {
}, nil
}
func cacheCleaner(caches ...*InMemoryLRUCachePartition) {
for {
time.Sleep(time.Minute)
for _, cache := range caches {
cache.lru.RemoveOldest()
}
}
}
type InMemoryLRUCachePartition struct {
name string
mutable bool