diff options
author | 2023-05-09 15:17:43 +0100 | |
---|---|---|
committer | 2023-05-09 16:17:43 +0200 | |
commit | 8275d70e38579128f0680ee4001a944907a3772a (patch) | |
tree | ce97c3f6609bcbc6d24c7423ef7c0247011e2122 /internal/cache | |
parent | [chore] tidy + update StatusToAPIStatus (#1754) (diff) | |
download | gotosocial-8275d70e38579128f0680ee4001a944907a3772a.tar.xz |
[bugfix] update go-cache version to support multi-keying (#1756)
* update go-cache version to support multi-keying
Signed-off-by: kim <grufwub@gmail.com>
* improved cache invalidation
Signed-off-by: kim <grufwub@gmail.com>
---------
Signed-off-by: kim <grufwub@gmail.com>
Diffstat (limited to 'internal/cache')
-rw-r--r-- | internal/cache/cache.go | 14 | ||||
-rw-r--r-- | internal/cache/visibility.go | 4 |
2 files changed, 12 insertions, 6 deletions
diff --git a/internal/cache/cache.go b/internal/cache/cache.go index c1f419d22..e981d79b1 100644 --- a/internal/cache/cache.go +++ b/internal/cache/cache.go @@ -65,8 +65,9 @@ func (c *Caches) Stop() { } // setuphooks sets necessary cache invalidation hooks between caches, -// as an invalidation indicates a database UPDATE / DELETE. INSERT is -// not handled by invalidation hooks and must be invalidated manually. +// as an invalidation indicates a database INSERT / UPDATE / DELETE. +// NOTE THEY ARE ONLY CALLED WHEN THE ITEM IS IN THE CACHE, SO FOR +// HOOKS TO BE CALLED ON DELETE YOU MUST FIRST POPULATE IT IN THE CACHE. func (c *Caches) setuphooks() { c.GTS.Account().SetInvalidateCallback(func(account *gtsmodel.Account) { // Invalidate account ID cached visibility. @@ -103,13 +104,18 @@ func (c *Caches) setuphooks() { c.Visibility.Invalidate("ItemID", followReq.TargetAccountID) c.Visibility.Invalidate("RequesterID", followReq.TargetAccountID) - // Invalidate any cached follow corresponding to this request. - c.GTS.Follow().Invalidate("AccountID.TargetAccountID", followReq.AccountID, followReq.TargetAccountID) + // Invalidate any cached follow with same ID. + c.GTS.Follow().Invalidate("ID", followReq.ID) }) c.GTS.Status().SetInvalidateCallback(func(status *gtsmodel.Status) { // Invalidate status ID cached visibility. c.Visibility.Invalidate("ItemID", status.ID) + + for _, id := range status.AttachmentIDs { + // Invalidate cache for attached media IDs, + c.GTS.Media().Invalidate("ID", id) + } }) c.GTS.User().SetInvalidateCallback(func(user *gtsmodel.User) { diff --git a/internal/cache/visibility.go b/internal/cache/visibility.go index 8706a8015..fd481eedc 100644 --- a/internal/cache/visibility.go +++ b/internal/cache/visibility.go @@ -30,8 +30,8 @@ type VisibilityCache struct { // NOTE: the cache MUST NOT be in use anywhere, this is not thread-safe. func (c *VisibilityCache) Init() { c.Cache = result.New([]result.Lookup{ - {Name: "ItemID"}, - {Name: "RequesterID"}, + {Name: "ItemID", Multi: true}, + {Name: "RequesterID", Multi: true}, {Name: "Type.RequesterID.ItemID"}, }, func(v1 *CachedVisibility) *CachedVisibility { v2 := new(CachedVisibility) |