diff --git a/app/workers/activitypub/distribution_worker.rb b/app/workers/activitypub/distribution_worker.rb index 575e110257..125278fa51 100644 --- a/app/workers/activitypub/distribution_worker.rb +++ b/app/workers/activitypub/distribution_worker.rb @@ -1,6 +1,11 @@ # frozen_string_literal: true class ActivityPub::DistributionWorker < ActivityPub::RawDistributionWorker + # Skip followers synchronization for accounts with a large number of followers, + # as this is expensive and people with very large amounts of followers + # necessarily have less control over them to begin with + MAX_FOLLOWERS_FOR_SYNCHRONIZATION = 25_000 + # Distribute a new status or an edit of a status to all the places # where the status is supposed to go or where it was interacted with def perform(status_id) @@ -27,6 +32,6 @@ class ActivityPub::DistributionWorker < ActivityPub::RawDistributionWorker end def options - { 'synchronize_followers' => @status.private_visibility? } + { 'synchronize_followers' => @status.private_visibility? && @account.followers_count < MAX_FOLLOWERS_FOR_SYNCHRONIZATION } end end