diff options
author | 2023-10-25 16:04:53 +0200 | |
---|---|---|
committer | 2023-10-25 15:04:53 +0100 | |
commit | c7b6cd7770cad9bfdc23decffa7c4068752dbbbd (patch) | |
tree | 0f039fd34fb0287860fce06ff1c30dedd1882136 /internal/cache | |
parent | [bugfix] allow store smaller PNG image than 261 bytes (#2263) (#2298) (diff) | |
download | gotosocial-c7b6cd7770cad9bfdc23decffa7c4068752dbbbd.tar.xz |
[feature] Status thread mute/unmute functionality (#2278)
* add db models + functions for keeping track of threads
* give em the old linty testy
* create, remove, check mutes
* swagger
* testerino
* test mute/unmute via api
* add info log about new index creation
* thread + allow muting of any remote statuses that mention a local account
* IsStatusThreadMutedBy -> IsThreadMutedByAccount
* use common processing functions in status processor
* set = NULL
* favee!
* get rekt darlings, darlings get rekt
* testrig please, have mercy muy liege
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, |