diff options
Diffstat (limited to 'internal/cache')
-rw-r--r-- | internal/cache/cache.go | 1 | ||||
-rw-r--r-- | internal/cache/gts.go | 30 | ||||
-rw-r--r-- | internal/cache/size.go | 11 |
3 files changed, 42 insertions, 0 deletions
diff --git a/internal/cache/cache.go b/internal/cache/cache.go index ec0ec3faa..777088f07 100644 --- a/internal/cache/cache.go +++ b/internal/cache/cache.go @@ -248,6 +248,7 @@ func (c *Caches) Sweep(threshold float64) { c.GTS.Status().Trim(threshold) c.GTS.StatusFave().Trim(threshold) c.GTS.Tag().Trim(threshold) + c.GTS.ThreadMute().Trim(threshold) c.GTS.Tombstone().Trim(threshold) c.GTS.User().Trim(threshold) c.Visibility.Trim(threshold) diff --git a/internal/cache/gts.go b/internal/cache/gts.go index 16a1585f7..d96b7267f 100644 --- a/internal/cache/gts.go +++ b/internal/cache/gts.go @@ -57,6 +57,7 @@ type GTSCaches struct { statusFave *result.Cache[*gtsmodel.StatusFave] statusFaveIDs *SliceCache[string] tag *result.Cache[*gtsmodel.Tag] + threadMute *result.Cache[*gtsmodel.ThreadMute] tombstone *result.Cache[*gtsmodel.Tombstone] user *result.Cache[*gtsmodel.User] @@ -93,6 +94,7 @@ func (c *GTSCaches) Init() { c.initStatus() c.initStatusFave() c.initTag() + c.initThreadMute() c.initStatusFaveIDs() c.initTombstone() c.initUser() @@ -249,6 +251,11 @@ func (c *GTSCaches) Tag() *result.Cache[*gtsmodel.Tag] { return c.tag } +// ThreadMute provides access to the gtsmodel ThreadMute database cache. +func (c *GTSCaches) ThreadMute() *result.Cache[*gtsmodel.ThreadMute] { + return c.threadMute +} + // StatusFaveIDs provides access to the status fave IDs list database cache. func (c *GTSCaches) StatusFaveIDs() *SliceCache[string] { return c.statusFaveIDs @@ -712,6 +719,7 @@ func (c *GTSCaches) initStatus() { {Name: "URI"}, {Name: "URL"}, {Name: "BoostOfID.AccountID"}, + {Name: "ThreadID", Multi: true}, }, func(s1 *gtsmodel.Status) *gtsmodel.Status { s2 := new(gtsmodel.Status) *s2 = *s1 @@ -778,6 +786,28 @@ func (c *GTSCaches) initTag() { c.tag.IgnoreErrors(ignoreErrors) } +func (c *GTSCaches) initThreadMute() { + cap := calculateResultCacheMax( + sizeOfThreadMute(), // model in-mem size. + config.GetCacheThreadMuteMemRatio(), + ) + + log.Infof(nil, "cache size = %d", cap) + + c.threadMute = result.New([]result.Lookup{ + {Name: "ID"}, + {Name: "ThreadID", Multi: true}, + {Name: "AccountID", Multi: true}, + {Name: "ThreadID.AccountID"}, + }, func(t1 *gtsmodel.ThreadMute) *gtsmodel.ThreadMute { + t2 := new(gtsmodel.ThreadMute) + *t2 = *t1 + return t2 + }, cap) + + c.threadMute.IgnoreErrors(ignoreErrors) +} + func (c *GTSCaches) initTombstone() { // Calculate maximum cache size. cap := calculateResultCacheMax( diff --git a/internal/cache/size.go b/internal/cache/size.go index f578b9402..3e77c68ac 100644 --- a/internal/cache/size.go +++ b/internal/cache/size.go @@ -194,6 +194,7 @@ func totalOfRatios() float64 { config.GetCacheStatusFaveMemRatio() + config.GetCacheStatusFaveIDsMemRatio() + config.GetCacheTagMemRatio() + + config.GetCacheThreadMuteMemRatio() + config.GetCacheTombstoneMemRatio() + config.GetCacheUserMemRatio() + config.GetCacheWebfingerMemRatio() + @@ -511,6 +512,16 @@ func sizeofTag() uintptr { })) } +func sizeOfThreadMute() uintptr { + return uintptr(size.Of(>smodel.ThreadMute{ + ID: exampleID, + CreatedAt: exampleTime, + UpdatedAt: exampleTime, + ThreadID: exampleID, + AccountID: exampleID, + })) +} + func sizeofTombstone() uintptr { return uintptr(size.Of(>smodel.Tombstone{ ID: exampleID, |