Reduce wasted work in RemoveStatusService due to inactive followers (#7672)
parent
a5c740ba41
commit
dc7bf28635
|
@ -183,4 +183,15 @@ module AccountInteractions
|
|||
def pinned?(status)
|
||||
status_pins.where(status: status).exists?
|
||||
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
|
||||
|
|
|
@ -53,7 +53,7 @@ class BatchedRemoveStatusService < BaseService
|
|||
end
|
||||
|
||||
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?
|
||||
|
||||
|
@ -65,7 +65,7 @@ class BatchedRemoveStatusService < BaseService
|
|||
end
|
||||
|
||||
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|
|
||||
FeedManager.instance.unpush_from_list(list, status)
|
||||
end
|
||||
|
|
|
@ -38,7 +38,7 @@ class FanOutOnWriteService < BaseService
|
|||
def deliver_to_followers(status)
|
||||
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|
|
||||
[status.id, follower.id, :home]
|
||||
end
|
||||
|
@ -48,7 +48,7 @@ class FanOutOnWriteService < BaseService
|
|||
def deliver_to_lists(status)
|
||||
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|
|
||||
[status.id, list.id, :list]
|
||||
end
|
||||
|
|
|
@ -43,13 +43,13 @@ class RemoveStatusService < BaseService
|
|||
end
|
||||
|
||||
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)
|
||||
end
|
||||
end
|
||||
|
||||
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)
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue