Make federationsender_cache_size configurable

This commit is contained in:
Neil Alexander 2020-12-04 14:27:22 +00:00
parent 88264974ee
commit 4631f53241
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
7 changed files with 36 additions and 17 deletions

View file

@ -42,7 +42,7 @@ func main() {
fmt.Println("Fetching", len(snapshotNIDs), "snapshot NIDs") fmt.Println("Fetching", len(snapshotNIDs), "snapshot NIDs")
cache, err := caching.NewInMemoryLRUCache(true) cache, err := caching.NewInMemoryLRUCache(&cfg.Global)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View file

@ -257,7 +257,7 @@ func testRoomserver(input []string, wantOutput []string, checkQueries func(api.R
panic(err) panic(err)
} }
cache, err := caching.NewInMemoryLRUCache(false) cache, err := caching.NewInMemoryLRUCache(&cfg.Global)
if err != nil { if err != nil {
panic(err) panic(err)
} }

View file

@ -103,6 +103,11 @@ global:
username: metrics username: metrics
password: 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. # Configuration for the Appservice API.
app_service_api: app_service_api:
internal_api: internal_api:

View file

@ -7,9 +7,8 @@ import (
) )
const ( const (
FederationEventCacheName = "federation_event" FederationSenderCacheName = "federation_event"
FederationEventCacheMaxEntries = 256 FederationSenderCacheMutable = true // to allow use of Unset only
FederationEventCacheMutable = true // to allow use of Unset only
) )
// FederationSenderCache contains the subset of functions needed for // FederationSenderCache contains the subset of functions needed for

View file

@ -4,16 +4,17 @@ import (
"fmt" "fmt"
lru "github.com/hashicorp/golang-lru" 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"
"github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promauto"
) )
func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) { func NewInMemoryLRUCache(cfg *config.Global) (*Caches, error) {
roomVersions, err := NewInMemoryLRUCachePartition( roomVersions, err := NewInMemoryLRUCachePartition(
RoomVersionCacheName, RoomVersionCacheName,
RoomVersionCacheMutable, RoomVersionCacheMutable,
RoomVersionCacheMaxEntries, RoomVersionCacheMaxEntries,
enablePrometheus, cfg.Metrics.Enabled,
) )
if err != nil { if err != nil {
return nil, err return nil, err
@ -22,7 +23,7 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) {
ServerKeyCacheName, ServerKeyCacheName,
ServerKeyCacheMutable, ServerKeyCacheMutable,
ServerKeyCacheMaxEntries, ServerKeyCacheMaxEntries,
enablePrometheus, cfg.Metrics.Enabled,
) )
if err != nil { if err != nil {
return nil, err return nil, err
@ -31,7 +32,7 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) {
RoomServerStateKeyNIDsCacheName, RoomServerStateKeyNIDsCacheName,
RoomServerStateKeyNIDsCacheMutable, RoomServerStateKeyNIDsCacheMutable,
RoomServerStateKeyNIDsCacheMaxEntries, RoomServerStateKeyNIDsCacheMaxEntries,
enablePrometheus, cfg.Metrics.Enabled,
) )
if err != nil { if err != nil {
return nil, err return nil, err
@ -40,7 +41,7 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) {
RoomServerEventTypeNIDsCacheName, RoomServerEventTypeNIDsCacheName,
RoomServerEventTypeNIDsCacheMutable, RoomServerEventTypeNIDsCacheMutable,
RoomServerEventTypeNIDsCacheMaxEntries, RoomServerEventTypeNIDsCacheMaxEntries,
enablePrometheus, cfg.Metrics.Enabled,
) )
if err != nil { if err != nil {
return nil, err return nil, err
@ -49,7 +50,7 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) {
RoomServerRoomNIDsCacheName, RoomServerRoomNIDsCacheName,
RoomServerRoomNIDsCacheMutable, RoomServerRoomNIDsCacheMutable,
RoomServerRoomNIDsCacheMaxEntries, RoomServerRoomNIDsCacheMaxEntries,
enablePrometheus, cfg.Metrics.Enabled,
) )
if err != nil { if err != nil {
return nil, err return nil, err
@ -58,16 +59,16 @@ func NewInMemoryLRUCache(enablePrometheus bool) (*Caches, error) {
RoomServerRoomIDsCacheName, RoomServerRoomIDsCacheName,
RoomServerRoomIDsCacheMutable, RoomServerRoomIDsCacheMutable,
RoomServerRoomIDsCacheMaxEntries, RoomServerRoomIDsCacheMaxEntries,
enablePrometheus, cfg.Metrics.Enabled,
) )
if err != nil { if err != nil {
return nil, err return nil, err
} }
federationEvents, err := NewInMemoryLRUCachePartition( federationEvents, err := NewInMemoryLRUCachePartition(
FederationEventCacheName, FederationSenderCacheName,
FederationEventCacheMutable, FederationSenderCacheMutable,
FederationEventCacheMaxEntries, cfg.Caches.FederationSenderEventCacheSize,
enablePrometheus, cfg.Metrics.Enabled,
) )
if err != nil { if err != nil {
return nil, err return nil, err

View file

@ -106,7 +106,7 @@ func NewBaseDendrite(cfg *config.Dendrite, componentName string, useHTTPAPIs boo
logrus.WithError(err).Panicf("failed to start opentracing") logrus.WithError(err).Panicf("failed to start opentracing")
} }
cache, err := caching.NewInMemoryLRUCache(true) cache, err := caching.NewInMemoryLRUCache(&cfg.Global)
if err != nil { if err != nil {
logrus.WithError(err).Warnf("Failed to create cache") logrus.WithError(err).Warnf("Failed to create cache")
} }

View file

@ -48,6 +48,9 @@ type Global struct {
// Metrics configuration // Metrics configuration
Metrics Metrics `yaml:"metrics"` Metrics Metrics `yaml:"metrics"`
// Cache configuration
Caches Caches `yaml:"caches"`
} }
func (c *Global) Defaults() { func (c *Global) Defaults() {
@ -140,3 +143,14 @@ func (c DatabaseOptions) MaxOpenConns() int {
func (c DatabaseOptions) ConnMaxLifetime() time.Duration { func (c DatabaseOptions) ConnMaxLifetime() time.Duration {
return time.Duration(c.ConnMaxLifetimeSeconds) * time.Second 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) {
}