Commit graph

94 commits

Author SHA1 Message Date
Mouse Reeve
6345beb90d
Merge pull request #2714 from WesleyAC/celery-ignore-results
Ignore Celery task results
2023-03-12 16:26:20 -07:00
Mouse Reeve
c28d523e6f
Merge branch 'main' into get-audience-perf 2023-03-12 15:40:53 -07:00
Wesley Aptekar-Cassels
2a5f722f6e Optimize add/remove book statuses task queries
The queries as they previously existed required joining together 12
different tables, which is extremely expensive. Splitting it into four
queries means that the individual queries can effectively use the
indexes we have, and should be very fast no matter how many statuses are
in the database.

Removing the .distinct() call is fine, since we're adding them to a set
in Redis anyways, which will take care of the duplicates.

It's a bit ugly that we now make four separate calls to Redis (this
might result in things being slightly slower in cases where there are an
extremely small number of statuses), but doing things differently would
result in significantly more surgery to the existing code, so I've opted
to avoid that for the moment.

Fixes: #2725
2023-03-09 15:26:03 -05:00
Wesley Aptekar-Cassels
56243f6529 Optimize HomeStream.get_audience
This splits HomeStream.get_audience into two separate database queries,
in order to more effectively take advantage of the indexes we have.
Combining the user ID query and the user following query means that
Postgres isn't able to use the index we have on the userfollows table.

The query planner claims that the userfollows query should be about 20
times faster than it was previously, and the id query should take a
negligible amount of time, since it's selecting a single item by primary
key.

We don't need to worry about duplicates, since there is a constraint
preventing a user from following themself.

Fixes: #2720
2023-03-09 00:50:24 -05:00
Wesley Aptekar-Cassels
23698dafe5 Change get_audience to return list of user IDs
This will make it simpler to implement various optimizations.
2023-03-09 00:50:24 -05:00
Wesley Aptekar-Cassels
41e14bdfaf Change unread_by_status_type_id to take user ID
Same reason as in prior commit.
2023-03-09 00:50:24 -05:00
Wesley Aptekar-Cassels
653e8ee81b Change unread_id to take user ID
Same reason as described in the prior commit.
2023-03-09 00:50:24 -05:00
Wesley Aptekar-Cassels
5446869c38 Change stream_id to take user ID
Anywhere we have a user object, we can easily get the user ID in the
caller, and this will allow us more flexibility in the future to
implement optimizations that involve knowing a user ID without querying
the database for the user object.
2023-03-09 00:50:16 -05:00
Wesley Aptekar-Cassels
9cbff312a5 Ignore Celery task results
Since we don't use the results of our Celery tasks (all of them return
None implicitly), it's prudent to set the ignore_result flag, for a
potential performance improvement. See the Celery docs for details [1].

We could do this with the global CELERY_IGNORE_RESULT setting, but it
offers more flexibility if we want to use task results in the future to
set it on a per-task basis.

[1]: https://docs.celeryq.dev/en/stable/userguide/tasks.html#ignore-results-you-don-t-want
2023-03-08 02:12:13 -05:00
Mouse Reeve
0354eb9828 Don't add imported reviews to timelines
Generally they're so backdated that they don't add, and they put too
much load on the instance.
2022-12-16 14:11:15 -08:00
Mouse Reeve
317cf5fcf5 Generate fewer add_status_tasks
Previously, every time a status was saved, a task would start to add it
to people's timelines. This meant there were a ton of duplicate tasks
that were potentially heavy to run. Now, the Status model has a "ready"
field which indicates that it's worth updating the timelines. It
defaults to True, which prevents statuses from accidentally not being
added due to ready state.

The ready state is explicitly set to false in the view, which is the
source of most of the noise for that task.
2022-11-15 14:14:32 -08:00
Hugh Rundle
cc97c52d12 make get_audience logic clearer
Retains 'direct' messages at the top of the logic tree to make it easier to understand.
In practice because direct messages are excluded from feeds anyway, this doesn't seem to make much difference, but it's easier to read.
2022-08-21 09:33:43 +10:00
Hugh Rundle
8d593e4498 hide replies to posts user cannot see
This is in response to #1870

Users should not see links to posts they are not allowed to see, in their feed. The main question is how to stop that happening.
This commit hides all replies to posts if the original post was "followers only" and the user is not a follower of the original poster. The privacy of the reply is not considered relevant (except "direct").

I believe this is the cleanest way to deal with the problem, as it avoids orphaned replies and confusing 404s, and a reply without access to the context of the original post is not particularly useful to anyone. This also feels like it respects the wishes of the original poster more accurately, as it does not draw attention from non-followers to the original followers-only post.

A less draconian approach might be to remove the link to the original status in the feed interface, however that simply leads to confusion of another kind since it will make the interface inconsistent.

This commit does not change any ActivityPub behaviour - it only affects the Bookwyrm user feeds. This means orphaned posts may be sent to external apps like Mastodon.
2022-08-14 14:17:10 +10:00
Mouse Reeve
876d9c2695 Fixes how backdated statuses are prioritized 2022-05-16 09:24:01 -07:00
Mouse Reeve
23e498879e Fixes account create tasks 2022-01-04 14:17:14 -08:00
Joachim
db5e7a886a Handle count of notifications banner 2021-11-24 19:00:30 +01:00
Mouse Reeve
f71ef286b6 Updates mocks 2021-11-12 08:55:47 -08:00
Mouse Reeve
3190ef4346 Deprioritize adding old statuses to timelines 2021-11-11 19:19:23 -08:00
Mouse Reeve
2307cb2227 Filter followers only in place
It's only used in one spot
2021-10-06 11:12:03 -07:00
Mouse Reeve
97cc129478 Updates calls to privacy_filter 2021-10-06 10:37:09 -07:00
Mouse Reeve
321949f2fa Lightly updates tests 2021-10-04 09:47:33 -07:00
Mouse Reeve
0798ba028f Fixes unblock signal 2021-10-03 11:51:17 -07:00
Mouse Reeve
ea303fb285 Updating string format synatx part 3 2021-09-20 16:45:26 -07:00
Mouse Reeve
08f6a97653 Python formatting 2021-09-18 11:33:43 -07:00
Mouse Reeve
377a4e1ef1 Updating string format syntax part 1 2021-09-17 21:39:18 -07:00
Mouse Reeve
c20f6c21ae Fixes date formats 2021-09-11 11:37:10 -07:00
Mouse Reeve
cd9fe70dbc Don't increment unread counts on csv import statuses 2021-09-11 10:26:33 -07:00
Mouse Reeve
85cc46184e Prioritize adding statuses to strems
having to wait to see statuses feels very weird and janky
2021-09-09 17:24:50 -07:00
Mouse Reeve
c9f9c0de58 Fixes boosts task 2021-09-08 09:21:15 -07:00
Mouse Reeve
aa91361fe4 Fixes celery kwarg for queue 2021-09-07 17:09:44 -07:00
Mouse Reeve
de3f18655c Set priorities on tasks 2021-09-07 16:33:43 -07:00
Mouse Reeve
f25835feeb Fixes error breaking registration 2021-09-07 09:39:42 -07:00
Mouse Reeve
4ea9637a2d Updates activitystreams tests 2021-09-06 16:16:45 -07:00
Mouse Reeve
e35c805960 Fixes typo in function call 2021-09-06 15:48:02 -07:00
Mouse Reeve
4db2557581 Fixes handling boosts 2021-09-06 15:39:32 -07:00
Mouse Reeve
d7557926f7 Create task for shelve updates 2021-08-30 14:08:53 -07:00
Mouse Reeve
32f044445f Fix merge weirdness around shelve/unshelve 2021-08-30 14:00:38 -07:00
Mouse Reeve
54f1b0aee2 Merge branch 'main' into activitystreams-celery 2021-08-30 13:48:34 -07:00
Mouse Reeve
c3ff7fcf9b Resolves merge weirdness 2021-08-30 13:44:19 -07:00
Mouse Reeve
26e932aa7b Increment unread count less wildly
Works on #1293
2021-08-23 15:47:14 -07:00
Mouse Reeve
9c21f4d8e6 Adds tests for boosts in activitystreams 2021-08-23 10:44:38 -07:00
Mouse Reeve
f284eebece Fixes boosts removing statuses from feeds 2021-08-23 07:04:59 -07:00
Mouse Reeve
ddaf949c94
Merge branch 'main' into activitystreams-celery 2021-08-17 10:42:09 -06:00
Mouse Reeve
0462a3b0fc
Merge pull request #1266 from bookwyrm-social/discover-local
Adds local discover view
2021-08-08 16:09:15 -06:00
Mouse Reeve
c14bcf19cc Use activitystreams to populate discovery view 2021-08-07 18:56:05 -07:00
Mouse Reeve
590338138c Populate streams tasks 2021-08-07 17:44:40 -07:00
Mouse Reeve
48a8b014ba Populate local stream for discover view 2021-08-07 17:18:20 -07:00
Mouse Reeve
cce7d9a648 Don't skip updates statuses when adding to streams
Generated note books are added post-initial save
2021-08-07 10:59:55 -07:00
Mouse Reeve
38f614a526 Include generated notes in books stream 2021-08-07 07:56:30 -07:00
Mouse Reeve
061deaefda Removes invalid argument 2021-08-05 19:28:23 -07:00