Skip to content
Extraits de code Groupes Projets
Non vérifiée Valider 46154278 rédigé par Eugen Rochko's avatar Eugen Rochko Validation de GitHub
Parcourir les fichiers

Reduce wasted work in RemoveStatusService due to inactive followers (#7672)

parent 7706ed03
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -183,4 +183,15 @@ module AccountInteractions ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter