PERF: `PostTiming.pretend_read` to not update `TopicUser` cache columns (#27201)

This commit splits out the updating of `TopicUser#last_read_post_number` in
`TopicUser.ensure_consistency!` to a new
`TopicUser.update_last_read_post_number` method` which
`PostTiming.pretend_read` will now call instead. Previously,
`PostTiming.pretend_read` calls `TopicUser.ensure_consistency!` which in
turn calls `TopicUser.update_post_action_cache` but that is
unnecessary for `PostTiming.pretend_read` since `PostTiming.pretend_read` does not
affect the `TopicUser#liked` or `TopicUser.bookmarked` columns which
`TopicUser.update_post_action_cache` updates. As the query in
`TopicUser.update_post_action_cache` can be expensive, we should avoid
calling it when it isn't necessary.

One such scenario where it is unnecessary is when we are closing a
topic.
This commit is contained in:
Alan Guo Xiang Tan 2024-05-27 19:56:33 +08:00 committed by GitHub
parent f9df40cc5c
commit 3c0e672fc4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 5 additions and 2 deletions

View File

@ -35,7 +35,7 @@ class PostTiming < ActiveRecord::Base
DB.exec(sql_query, params)
TopicUser.ensure_consistency!(topic_id)
TopicUser.update_last_read_post_number(topic_id:)
end
def self.record_new_timing(args)

View File

@ -531,8 +531,11 @@ SQL
end
def self.ensure_consistency!(topic_id = nil)
update_post_action_cache(topic_id: topic_id)
update_post_action_cache(topic_id:)
update_last_read_post_number(topic_id:)
end
def self.update_last_read_post_number(topic_id: nil)
# TODO this needs some reworking, when we mark stuff skipped
# we up these numbers so they are not in-sync
# the simple fix is to add a column here, but table is already quite big