Fix UnmergeWorker being exceptionally slow in some conditions (#18110)

This commit is contained in:
Claire 2022-04-26 21:48:36 +02:00 committed by GitHub
parent 0360135d4d
commit b9197486e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -157,10 +157,10 @@ class FeedManager
# @param [Account] into_account # @param [Account] into_account
# @return [void] # @return [void]
def unmerge_from_home(from_account, into_account) def unmerge_from_home(from_account, into_account)
timeline_key = key(:home, into_account.id) timeline_key = key(:home, into_account.id)
oldest_home_score = redis.zrange(timeline_key, 0, 0, with_scores: true)&.first&.last&.to_i || 0 timeline_status_ids = redis.zrange(timeline_key, 0, -1)
from_account.statuses.select('id, reblog_of_id').where('id > ?', oldest_home_score).reorder(nil).find_each do |status| from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status|
remove_from_feed(:home, into_account.id, status, into_account.user&.aggregates_reblogs?) remove_from_feed(:home, into_account.id, status, into_account.user&.aggregates_reblogs?)
end end
end end
@ -170,10 +170,10 @@ class FeedManager
# @param [List] list # @param [List] list
# @return [void] # @return [void]
def unmerge_from_list(from_account, list) def unmerge_from_list(from_account, list)
timeline_key = key(:list, list.id) timeline_key = key(:list, list.id)
oldest_list_score = redis.zrange(timeline_key, 0, 0, with_scores: true)&.first&.last&.to_i || 0 timeline_status_ids = redis.zrange(timeline_key, 0, -1)
from_account.statuses.select('id, reblog_of_id').where('id > ?', oldest_list_score).reorder(nil).find_each do |status| from_account.statuses.select('id, reblog_of_id').where(id: timeline_status_ids).reorder(nil).find_each do |status|
remove_from_feed(:list, list.id, status, list.account.user&.aggregates_reblogs?) remove_from_feed(:list, list.id, status, list.account.user&.aggregates_reblogs?)
end end
end end