From 4631f5324151e006a15d6f19008f06361b994607 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Fri, 4 Dec 2020 14:27:22 +0000 Subject: [PATCH] Make federationsender_cache_size configurable --- cmd/resolve-state/main.go | 2 +- cmd/roomserver-integration-tests/main.go | 2 +- dendrite-config.yaml | 5 +++++ internal/caching/cache_federationevents.go | 5 ++--- internal/caching/impl_inmemorylru.go | 23 +++++++++++----------- setup/base.go | 2 +- setup/config/config_global.go | 14 +++++++++++++ 7 files changed, 36 insertions(+), 17 deletions(-) diff --git a/cmd/resolve-state/main.go b/cmd/resolve-state/main.go index efa583331..c3b34ab5d 100644 --- a/cmd/resolve-state/main.go +++ b/cmd/resolve-state/main.go @@ -42,7 +42,7 @@ func main() { fmt.Println("Fetching", len(snapshotNIDs), "snapshot NIDs") - cache, err := caching.NewInMemoryLRUCache(true) + cache, err := caching.NewInMemoryLRUCache(&cfg.Global) if err != nil { panic(err) } diff --git a/cmd/roomserver-integration-tests/main.go b/cmd/roomserver-integration-tests/main.go index ff3f06b6e..71995cae2 100644 --- a/cmd/roomserver-integration-tests/main.go +++ b/cmd/roomserver-integration-tests/main.go @@ -257,7 +257,7 @@ func testRoomserver(input []string, wantOutput []string, checkQueries func(api.R panic(err) } - cache, err := caching.NewInMemoryLRUCache(false) + cache, err := caching.NewInMemoryLRUCache(&cfg.Global) if err != nil { panic(err) } diff --git a/dendrite-config.yaml b/dendrite-config.yaml index ccdb32432..eca4f8bf0 100644 --- a/dendrite-config.yaml +++ b/dendrite-config.yaml @@ -103,6 +103,11 @@ global: username: metrics password: metrics + # Advanced options for tuning in-memory caches. Do not change these unless + # you know what you are doing. + # caches: + # federationsender_cache_size: 128 + # Configuration for the Appservice API. app_service_api: internal_api: diff --git a/internal/caching/cache_federationevents.go b/internal/caching/cache_federationevents.go index a48c11fd2..6ab00c4a7 100644 --- a/internal/caching/cache_federationevents.go +++ b/internal/caching/cache_federationevents.go @@ -7,9 +7,8 @@ import ( ) const ( - FederationEventCacheName = "federation_event" - FederationEventCacheMaxEntries = 256 - FederationEventCacheMutable = true // to allow use of Unset only + FederationSenderCacheName = "federation_event" + FederationSenderCacheMutable = true // to allow use of Unset only ) // FederationSenderCache contains the subset of functions needed for diff --git a/internal/caching/impl_inmemorylru.go b/internal/caching/impl_inmemorylru.go index f05e8f3c6..7e4b8a488 100644 --- a/internal/caching/impl_inmemorylru.go +++ b/internal/caching/impl_inmemorylru.go @@ -4,16 +4,17 @@ import ( "fmt" lru "github.com/hashicorp/golang-lru" + "github.com/matrix-org/dendrite/setup/config" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" ) -func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) { +func NewInMemoryLRUCache(cfg *config.Global) (*Caches, error) { roomVersions, err := NewInMemoryLRUCachePartition( RoomVersionCacheName, RoomVersionCacheMutable, RoomVersionCacheMaxEntries, - enablePrometheus, + cfg.Metrics.Enabled, ) if err != nil { return nil, err @@ -22,7 +23,7 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) { ServerKeyCacheName, ServerKeyCacheMutable, ServerKeyCacheMaxEntries, - enablePrometheus, + cfg.Metrics.Enabled, ) if err != nil { return nil, err @@ -31,7 +32,7 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) { RoomServerStateKeyNIDsCacheName, RoomServerStateKeyNIDsCacheMutable, RoomServerStateKeyNIDsCacheMaxEntries, - enablePrometheus, + cfg.Metrics.Enabled, ) if err != nil { return nil, err @@ -40,7 +41,7 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) { RoomServerEventTypeNIDsCacheName, RoomServerEventTypeNIDsCacheMutable, RoomServerEventTypeNIDsCacheMaxEntries, - enablePrometheus, + cfg.Metrics.Enabled, ) if err != nil { return nil, err @@ -49,7 +50,7 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) { RoomServerRoomNIDsCacheName, RoomServerRoomNIDsCacheMutable, RoomServerRoomNIDsCacheMaxEntries, - enablePrometheus, + cfg.Metrics.Enabled, ) if err != nil { return nil, err @@ -58,16 +59,16 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) { RoomServerRoomIDsCacheName, RoomServerRoomIDsCacheMutable, RoomServerRoomIDsCacheMaxEntries, - enablePrometheus, + cfg.Metrics.Enabled, ) if err != nil { return nil, err } federationEvents, err := NewInMemoryLRUCachePartition( - FederationEventCacheName, - FederationEventCacheMutable, - FederationEventCacheMaxEntries, - enablePrometheus, + FederationSenderCacheName, + FederationSenderCacheMutable, + cfg.Caches.FederationSenderEventCacheSize, + cfg.Metrics.Enabled, ) if err != nil { return nil, err diff --git a/setup/base.go b/setup/base.go index acbf2d35f..79cfae6d1 100644 --- a/setup/base.go +++ b/setup/base.go @@ -106,7 +106,7 @@ func NewBaseDendrite(cfg *config.Dendrite, componentName string, useHTTPAPIs boo logrus.WithError(err).Panicf("failed to start opentracing") } - cache, err := caching.NewInMemoryLRUCache(true) + cache, err := caching.NewInMemoryLRUCache(&cfg.Global) if err != nil { logrus.WithError(err).Warnf("Failed to create cache") } diff --git a/setup/config/config_global.go b/setup/config/config_global.go index 956522176..ef2b09113 100644 --- a/setup/config/config_global.go +++ b/setup/config/config_global.go @@ -48,6 +48,9 @@ type Global struct { // Metrics configuration Metrics Metrics `yaml:"metrics"` + + // Cache configuration + Caches Caches `yaml:"caches"` } func (c *Global) Defaults() { @@ -140,3 +143,14 @@ func (c DatabaseOptions) MaxOpenConns() int { func (c DatabaseOptions) ConnMaxLifetime() time.Duration { return time.Duration(c.ConnMaxLifetimeSeconds) * time.Second } + +type Caches struct { + FederationSenderEventCacheSize int `yaml:"federationsender_cache_size"` +} + +func (c *Caches) Defaults() { + c.FederationSenderEventCacheSize = 128 +} + +func (c *Caches) Verify(configErrs *ConfigErrors, isMonolith bool) { +}