diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/cache/cache.go | 14 | ||||
| -rw-r--r-- | internal/cache/visibility.go | 4 | ||||
| -rw-r--r-- | internal/db/bundb/relationship_follow_req.go | 22 | 
3 files changed, 24 insertions, 16 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) diff --git a/internal/db/bundb/relationship_follow_req.go b/internal/db/bundb/relationship_follow_req.go index 4a6ec1ab8..c0f4bce3b 100644 --- a/internal/db/bundb/relationship_follow_req.go +++ b/internal/db/bundb/relationship_follow_req.go @@ -208,14 +208,17 @@ func (r *relationshipDB) AcceptFollowRequest(ctx context.Context, sourceAccountI  		Notify:          followReq.Notify,  	} -	// If the follow already exists, just -	// replace the URI with the new one. -	if _, err := r.conn. -		NewInsert(). -		Model(follow). -		On("CONFLICT (?,?) DO UPDATE set ? = ?", bun.Ident("account_id"), bun.Ident("target_account_id"), bun.Ident("uri"), follow.URI). -		Exec(ctx); err != nil { -		return nil, r.conn.ProcessError(err) +	if err := r.state.Caches.GTS.Follow().Store(follow, func() error { +		// If the follow already exists, just +		// replace the URI with the new one. +		_, err := r.conn. +			NewInsert(). +			Model(follow). +			On("CONFLICT (?,?) DO UPDATE set ? = ?", bun.Ident("account_id"), bun.Ident("target_account_id"), bun.Ident("uri"), follow.URI). +			Exec(ctx) +		return r.conn.ProcessError(err) +	}); err != nil { +		return nil, err  	}  	// Delete original follow request. @@ -227,8 +230,7 @@ func (r *relationshipDB) AcceptFollowRequest(ctx context.Context, sourceAccountI  		return nil, r.conn.ProcessError(err)  	} -	// Invalidate follow request from cache lookups; this will -	// invalidate the follow as well via the invalidate hook. +	// Invalidate follow request from cache lookups  	r.state.Caches.GTS.FollowRequest().Invalidate("ID", followReq.ID)  	// Delete original follow request notification  | 
