diff options
author | 2024-04-16 13:10:13 +0200 | |
---|---|---|
committer | 2024-04-16 13:10:13 +0200 | |
commit | 3cceed11b28b5f42a653d85ed779d652fd8c26ad (patch) | |
tree | 0a7f0994e477609ca705a45f382dfb62056b196e /internal/processing/fedi | |
parent | [performance] cached oauth database types (#2838) (diff) | |
download | gotosocial-3cceed11b28b5f42a653d85ed779d652fd8c26ad.tar.xz |
[feature/performance] Store account stats in separate table (#2831)
* [feature/performance] Store account stats in separate table, get stats from remote
* test account stats
* add some missing increment / decrement calls
* change stats function signatures
* rejig logging a bit
* use lock when updating stats
Diffstat (limited to 'internal/processing/fedi')
-rw-r--r-- | internal/processing/fedi/collections.go | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/internal/processing/fedi/collections.go b/internal/processing/fedi/collections.go index 0eacf45da..7a6c99adb 100644 --- a/internal/processing/fedi/collections.go +++ b/internal/processing/fedi/collections.go @@ -126,11 +126,12 @@ func (p *Processor) FollowersGet(ctx context.Context, requestedUser string, page return nil, gtserror.NewErrorInternalError(err) } - // Calculate total number of followers available for account. - total, err := p.state.DB.CountAccountFollowers(ctx, receiver.ID) - if err != nil { - err := gtserror.Newf("error counting followers: %w", err) - return nil, gtserror.NewErrorInternalError(err) + // Ensure we have stats for this account. + if receiver.Stats == nil { + if err := p.state.DB.PopulateAccountStats(ctx, receiver); err != nil { + err := gtserror.Newf("error getting stats for account %s: %w", receiver.ID, err) + return nil, gtserror.NewErrorInternalError(err) + } } var obj vocab.Type @@ -138,7 +139,7 @@ func (p *Processor) FollowersGet(ctx context.Context, requestedUser string, page // Start the AS collection params. var params ap.CollectionParams params.ID = collectionID - params.Total = total + params.Total = *receiver.Stats.FollowersCount switch { @@ -235,11 +236,12 @@ func (p *Processor) FollowingGet(ctx context.Context, requestedUser string, page return nil, gtserror.NewErrorInternalError(err) } - // Calculate total number of following available for account. - total, err := p.state.DB.CountAccountFollows(ctx, receiver.ID) - if err != nil { - err := gtserror.Newf("error counting follows: %w", err) - return nil, gtserror.NewErrorInternalError(err) + // Ensure we have stats for this account. + if receiver.Stats == nil { + if err := p.state.DB.PopulateAccountStats(ctx, receiver); err != nil { + err := gtserror.Newf("error getting stats for account %s: %w", receiver.ID, err) + return nil, gtserror.NewErrorInternalError(err) + } } var obj vocab.Type @@ -247,7 +249,7 @@ func (p *Processor) FollowingGet(ctx context.Context, requestedUser string, page // Start AS collection params. var params ap.CollectionParams params.ID = collectionID - params.Total = total + params.Total = *receiver.Stats.FollowingCount switch { case receiver.IsInstance() || |