From 3ca36e1319bfe05739e732099a33010ea26e409a Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Wed, 22 Apr 2020 11:01:42 +0100 Subject: [PATCH] Use hashicorp implementation which mutexes for us --- common/basecomponent/base.go | 7 ++++++- common/caching/inmemorylru.go | 21 +++++++++------------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/common/basecomponent/base.go b/common/basecomponent/base.go index c3df6c50a..743e034fa 100644 --- a/common/basecomponent/base.go +++ b/common/basecomponent/base.go @@ -85,11 +85,16 @@ func NewBaseDendrite(cfg *config.Dendrite, componentName string) *BaseDendrite { kafkaConsumer, kafkaProducer = setupKafka(cfg) } + cache, err := caching.NewInMemoryLRUCache() + if err != nil { + logrus.WithError(err).Warnf("Failed to create cache") + } + return &BaseDendrite{ componentName: componentName, tracerCloser: closer, Cfg: cfg, - Cache: caching.NewInMemoryLRUCache(), // TODO: make configurable + Cache: cache, APIMux: mux.NewRouter().UseEncodedPath(), httpClient: &http.Client{Timeout: HTTPClientTimeout}, KafkaConsumer: kafkaConsumer, diff --git a/common/caching/inmemorylru.go b/common/caching/inmemorylru.go index 774b70b2c..df9295ba2 100644 --- a/common/caching/inmemorylru.go +++ b/common/caching/inmemorylru.go @@ -1,30 +1,29 @@ package caching import ( - "sync" - - "github.com/golang/groupcache/lru" + lru "github.com/hashicorp/golang-lru" "github.com/matrix-org/gomatrixserverlib" ) type InMemoryLRUCache struct { - roomVersions *lru.Cache - roomVersionsMutex sync.RWMutex + roomVersions *lru.Cache } -func NewInMemoryLRUCache() *InMemoryLRUCache { - return &InMemoryLRUCache{ - roomVersions: lru.New(128), +func NewInMemoryLRUCache() (*InMemoryLRUCache, error) { + roomVersionCache, rvErr := lru.New(128) + if rvErr != nil { + return nil, rvErr } + return &InMemoryLRUCache{ + roomVersions: roomVersionCache, + }, nil } func (c *InMemoryLRUCache) GetRoomVersion(roomID string) (gomatrixserverlib.RoomVersion, bool) { if c == nil { return "", false } - c.roomVersionsMutex.RLock() val, found := c.roomVersions.Get(roomID) - c.roomVersionsMutex.RUnlock() if found && val != nil { if roomVersion, ok := val.(gomatrixserverlib.RoomVersion); ok { return roomVersion, true @@ -37,7 +36,5 @@ func (c *InMemoryLRUCache) StoreRoomVersion(roomID string, roomVersion gomatrixs if c == nil { return } - c.roomVersionsMutex.Lock() - defer c.roomVersionsMutex.Unlock() c.roomVersions.Add(roomID, roomVersion) }