mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-08 14:43:09 -06:00
Configurable cache sizees
This commit is contained in:
parent
4aaed3aff3
commit
bf18f7d5ad
|
|
@ -53,7 +53,7 @@ func main() {
|
||||||
|
|
||||||
fmt.Println("Fetching", len(snapshotNIDs), "snapshot NIDs")
|
fmt.Println("Fetching", len(snapshotNIDs), "snapshot NIDs")
|
||||||
|
|
||||||
cache, err := caching.NewRistrettoCache(128*caching.MB, true)
|
cache, err := caching.NewRistrettoCache(128*1024*1024, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,7 @@ func TestMain(m *testing.M) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create a new cache but don't enable prometheus!
|
// Create a new cache but don't enable prometheus!
|
||||||
s.cache, err = caching.NewRistrettoCache(8*caching.MB, false)
|
s.cache, err = caching.NewRistrettoCache(8*1024*1024, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic("can't create cache: " + err.Error())
|
panic("can't create cache: " + err.Error())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,6 @@
|
||||||
package caching
|
package caching
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/roomserver/types"
|
"github.com/matrix-org/dendrite/roomserver/types"
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
)
|
)
|
||||||
|
|
@ -38,15 +36,3 @@ type keyable interface {
|
||||||
type costable interface {
|
type costable interface {
|
||||||
CacheCost() int
|
CacheCost() int
|
||||||
}
|
}
|
||||||
|
|
||||||
type CacheSize int64
|
|
||||||
|
|
||||||
const (
|
|
||||||
_ = iota
|
|
||||||
KB CacheSize = 1 << (10 * iota)
|
|
||||||
MB
|
|
||||||
GB
|
|
||||||
TB
|
|
||||||
)
|
|
||||||
|
|
||||||
const CacheNoMaxAge = time.Duration(0)
|
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,10 @@ import (
|
||||||
"github.com/prometheus/client_golang/prometheus/promauto"
|
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||||
)
|
)
|
||||||
|
|
||||||
func MustCreateCache(maxCost CacheSize, enablePrometheus bool) *ristretto.Cache {
|
func MustCreateCache(maxCost int64, enablePrometheus bool) *ristretto.Cache {
|
||||||
cache, err := ristretto.NewCache(&ristretto.Config{
|
cache, err := ristretto.NewCache(&ristretto.Config{
|
||||||
NumCounters: 1e5,
|
NumCounters: 1e5,
|
||||||
MaxCost: int64(maxCost),
|
MaxCost: maxCost,
|
||||||
BufferItems: 64,
|
BufferItems: 64,
|
||||||
Metrics: true,
|
Metrics: true,
|
||||||
KeyToHash: func(key interface{}) (uint64, uint64) {
|
KeyToHash: func(key interface{}) (uint64, uint64) {
|
||||||
|
|
@ -56,7 +56,7 @@ const (
|
||||||
lazyLoadingCache
|
lazyLoadingCache
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewRistrettoCache(maxCost CacheSize, enablePrometheus bool) (*Caches, error) {
|
func NewRistrettoCache(maxCost int64, enablePrometheus bool) (*Caches, error) {
|
||||||
cache := MustCreateCache(maxCost, enablePrometheus)
|
cache := MustCreateCache(maxCost, enablePrometheus)
|
||||||
return &Caches{
|
return &Caches{
|
||||||
RoomVersions: &RistrettoCachePartition[string, gomatrixserverlib.RoomVersion]{
|
RoomVersions: &RistrettoCachePartition[string, gomatrixserverlib.RoomVersion]{
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ func TestSingleTransactionOnInput(t *testing.T) {
|
||||||
Kind: api.KindOutlier, // don't panic if we generate an output event
|
Kind: api.KindOutlier, // don't panic if we generate an output event
|
||||||
Event: event.Headered(gomatrixserverlib.RoomVersionV6),
|
Event: event.Headered(gomatrixserverlib.RoomVersionV6),
|
||||||
}
|
}
|
||||||
cache, err := caching.NewRistrettoCache(8*caching.MB, false)
|
cache, err := caching.NewRistrettoCache(8*1024*1024, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,7 @@ func NewBaseDendrite(cfg *config.Dendrite, componentName string, options ...Base
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cache, err := caching.NewRistrettoCache(1*caching.GB, enableMetrics)
|
cache, err := caching.NewRistrettoCache(cfg.Global.Caches.EstMaxSize, enableMetrics)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.WithError(err).Warnf("Failed to create cache")
|
logrus.WithError(err).Warnf("Failed to create cache")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,9 @@ type Global struct {
|
||||||
|
|
||||||
// ReportStats configures opt-in anonymous stats reporting.
|
// ReportStats configures opt-in anonymous stats reporting.
|
||||||
ReportStats ReportStats `yaml:"report_stats"`
|
ReportStats ReportStats `yaml:"report_stats"`
|
||||||
|
|
||||||
|
// Configuration for the caches.
|
||||||
|
Caches Caches `yaml:"caches"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Global) Defaults(generate bool) {
|
func (c *Global) Defaults(generate bool) {
|
||||||
|
|
@ -90,6 +93,7 @@ func (c *Global) Defaults(generate bool) {
|
||||||
c.Sentry.Defaults()
|
c.Sentry.Defaults()
|
||||||
c.ServerNotices.Defaults(generate)
|
c.ServerNotices.Defaults(generate)
|
||||||
c.ReportStats.Defaults()
|
c.ReportStats.Defaults()
|
||||||
|
c.Caches.Defaults(generate)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Global) Verify(configErrs *ConfigErrors, isMonolith bool) {
|
func (c *Global) Verify(configErrs *ConfigErrors, isMonolith bool) {
|
||||||
|
|
@ -102,6 +106,7 @@ func (c *Global) Verify(configErrs *ConfigErrors, isMonolith bool) {
|
||||||
c.DNSCache.Verify(configErrs, isMonolith)
|
c.DNSCache.Verify(configErrs, isMonolith)
|
||||||
c.ServerNotices.Verify(configErrs, isMonolith)
|
c.ServerNotices.Verify(configErrs, isMonolith)
|
||||||
c.ReportStats.Verify(configErrs, isMonolith)
|
c.ReportStats.Verify(configErrs, isMonolith)
|
||||||
|
c.Caches.Verify(configErrs, isMonolith)
|
||||||
}
|
}
|
||||||
|
|
||||||
type OldVerifyKeys struct {
|
type OldVerifyKeys struct {
|
||||||
|
|
@ -168,6 +173,20 @@ func (c *ServerNotices) Defaults(generate bool) {
|
||||||
|
|
||||||
func (c *ServerNotices) Verify(errors *ConfigErrors, isMonolith bool) {}
|
func (c *ServerNotices) Verify(errors *ConfigErrors, isMonolith bool) {}
|
||||||
|
|
||||||
|
type Caches struct {
|
||||||
|
Enabled bool `yaml:"enabled"`
|
||||||
|
EstMaxSize int64 `yaml:"max_bytes_est"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Caches) Defaults(generate bool) {
|
||||||
|
c.Enabled = true
|
||||||
|
c.EstMaxSize = 1024 * 1024 * 1024 // 1GB
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Caches) Verify(errors *ConfigErrors, isMonolith bool) {
|
||||||
|
checkPositive(errors, "max_bytes_est", int64(c.EstMaxSize))
|
||||||
|
}
|
||||||
|
|
||||||
// ReportStats configures opt-in anonymous stats reporting.
|
// ReportStats configures opt-in anonymous stats reporting.
|
||||||
type ReportStats struct {
|
type ReportStats struct {
|
||||||
// Enabled configures anonymous usage stats of the server
|
// Enabled configures anonymous usage stats of the server
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue