Reduce wasted work in RemoveStatusService due to inactive followers (#7672)
This commit is contained in:
parent
7706ed038f
commit
461542784b
4 changed files with 17 additions and 6 deletions
|
@ -183,4 +183,15 @@ module AccountInteractions
|
||||||
def pinned?(status)
|
def pinned?(status)
|
||||||
status_pins.where(status: status).exists?
|
status_pins.where(status: status).exists?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def followers_for_local_distribution
|
||||||
|
followers.local
|
||||||
|
.joins(:user)
|
||||||
|
.where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago)
|
||||||
|
end
|
||||||
|
|
||||||
|
def lists_for_local_distribution
|
||||||
|
lists.joins(account: :user)
|
||||||
|
.where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -53,7 +53,7 @@ class BatchedRemoveStatusService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def unpush_from_home_timelines(account, statuses)
|
def unpush_from_home_timelines(account, statuses)
|
||||||
recipients = account.followers.local.to_a
|
recipients = account.followers_for_local_distribution.to_a
|
||||||
|
|
||||||
recipients << account if account.local?
|
recipients << account if account.local?
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ class BatchedRemoveStatusService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def unpush_from_list_timelines(account, statuses)
|
def unpush_from_list_timelines(account, statuses)
|
||||||
account.lists.select(:id, :account_id).each do |list|
|
account.lists_for_local_distribution.select(:id, :account_id).each do |list|
|
||||||
statuses.each do |status|
|
statuses.each do |status|
|
||||||
FeedManager.instance.unpush_from_list(list, status)
|
FeedManager.instance.unpush_from_list(list, status)
|
||||||
end
|
end
|
||||||
|
|
|
@ -38,7 +38,7 @@ class FanOutOnWriteService < BaseService
|
||||||
def deliver_to_followers(status)
|
def deliver_to_followers(status)
|
||||||
Rails.logger.debug "Delivering status #{status.id} to followers"
|
Rails.logger.debug "Delivering status #{status.id} to followers"
|
||||||
|
|
||||||
status.account.followers.where(domain: nil).joins(:user).where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago).select(:id).reorder(nil).find_in_batches do |followers|
|
status.account.followers_for_local_distribution.select(:id).reorder(nil).find_in_batches do |followers|
|
||||||
FeedInsertWorker.push_bulk(followers) do |follower|
|
FeedInsertWorker.push_bulk(followers) do |follower|
|
||||||
[status.id, follower.id, :home]
|
[status.id, follower.id, :home]
|
||||||
end
|
end
|
||||||
|
@ -48,7 +48,7 @@ class FanOutOnWriteService < BaseService
|
||||||
def deliver_to_lists(status)
|
def deliver_to_lists(status)
|
||||||
Rails.logger.debug "Delivering status #{status.id} to lists"
|
Rails.logger.debug "Delivering status #{status.id} to lists"
|
||||||
|
|
||||||
status.account.lists.joins(account: :user).where('users.current_sign_in_at > ?', User::ACTIVE_DURATION.ago).select(:id).reorder(nil).find_in_batches do |lists|
|
status.account.lists_for_local_distribution.select(:id).reorder(nil).find_in_batches do |lists|
|
||||||
FeedInsertWorker.push_bulk(lists) do |list|
|
FeedInsertWorker.push_bulk(lists) do |list|
|
||||||
[status.id, list.id, :list]
|
[status.id, list.id, :list]
|
||||||
end
|
end
|
||||||
|
|
|
@ -43,13 +43,13 @@ class RemoveStatusService < BaseService
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_from_followers
|
def remove_from_followers
|
||||||
@account.followers.local.find_each do |follower|
|
@account.followers_for_local_distribution.find_each do |follower|
|
||||||
FeedManager.instance.unpush_from_home(follower, @status)
|
FeedManager.instance.unpush_from_home(follower, @status)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_from_lists
|
def remove_from_lists
|
||||||
@account.lists.select(:id, :account_id).find_each do |list|
|
@account.lists_for_local_distribution.select(:id, :account_id).find_each do |list|
|
||||||
FeedManager.instance.unpush_from_list(list, @status)
|
FeedManager.instance.unpush_from_list(list, @status)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue