]> cat aescling's git repositories - mastodon.git/commitdiff
change sidekiq queueing to bulk push (#3536)
authortakayamaki <fsgiko@gmail.com>
Sat, 3 Jun 2017 22:11:15 +0000 (07:11 +0900)
committerEugen Rochko <eugen@zeonfederated.com>
Sat, 3 Jun 2017 22:11:15 +0000 (00:11 +0200)
Gemfile
Gemfile.lock
app/controllers/settings/follower_domains_controller.rb
app/services/fan_out_on_write_service.rb
app/workers/scheduler/subscriptions_scheduler.rb
app/workers/soft_block_domain_followers_worker.rb

diff --git a/Gemfile b/Gemfile
index 835a6996a81d936208836b3c01189a572122e55d..d5fbab7485ae8bff3c83af0f0d5bee8f0664015f 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -52,6 +52,7 @@ gem 'sanitize', '~> 4.4'
 gem 'sidekiq', '~> 5.0'
 gem 'sidekiq-scheduler', '~> 2.1'
 gem 'sidekiq-unique-jobs', '~> 5.0'
+gem 'sidekiq-bulk', '~>0.1.1'
 gem 'simple-navigation', '~> 4.0'
 gem 'simple_form', '~> 3.4'
 gem 'sprockets-rails', '~> 3.2', require: 'sprockets/railtie'
index c7ea6d79edb49d49a382f033025e42d385ee97f9..ee86bfafd117e1f1cbab81b2a4a78c44c790766c 100644 (file)
@@ -402,6 +402,9 @@ GEM
       connection_pool (~> 2.2, >= 2.2.0)
       rack-protection (>= 1.5.0)
       redis (~> 3.3, >= 3.3.3)
+    sidekiq-bulk (0.1.1)
+      activesupport
+      sidekiq
     sidekiq-scheduler (2.1.4)
       redis (~> 3)
       rufus-scheduler (~> 3.2)
@@ -543,6 +546,7 @@ DEPENDENCIES
   sanitize (~> 4.4)
   scss_lint (~> 0.53)
   sidekiq (~> 5.0)
+  sidekiq-bulk (~> 0.1.1)
   sidekiq-scheduler (~> 2.1)
   sidekiq-unique-jobs (~> 5.0)
   simple-navigation (~> 4.0)
index 13722345fdca1e768384ec40b8b2659cd8abc0a9..90b48887facd74522c916f2fafa0e7492467a1ca 100644 (file)
@@ -1,5 +1,7 @@
 # frozen_string_literal: true
 
+require 'sidekiq-bulk'
+
 class Settings::FollowerDomainsController < ApplicationController
   layout 'admin'
 
@@ -13,8 +15,8 @@ class Settings::FollowerDomainsController < ApplicationController
   def update
     domains = bulk_params[:select] || []
 
-    domains.each do |domain|
-      SoftBlockDomainFollowersWorker.perform_async(current_account.id, domain)
+    SoftBlockDomainFollowersWorker.push_bulk(domains) do |domain|
+      [current_account.id, domain]
     end
 
     redirect_to settings_follower_domains_path, notice: I18n.t('followers.success', count: domains.size)
index 055fda8a9b001154df562f2f2484d1d73aff9ba6..3b74696d5b0df4dd0dd0663d639ba3474b114dd6 100644 (file)
@@ -1,5 +1,7 @@
 # frozen_string_literal: true
 
+require 'sidekiq-bulk'
+
 class FanOutOnWriteService < BaseService
   # Push a status into home and mentions feeds
   # @param [Status] status
@@ -34,8 +36,10 @@ 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 > ?', 14.days.ago).select(:id).reorder(nil).find_each do |follower|
-      FeedInsertWorker.perform_async(status.id, follower.id)
+    status.account.followers.where(domain: nil).joins(:user).where('users.current_sign_in_at > ?', 14.days.ago).select(:id).reorder(nil).find_in_batches do |followers|
+      FeedInsertWorker.push_bulk(followers) do |follower|
+        [status.id, follower.id]
+      end
     end
   end
 
index 3ea3ad2b89a0e4a099dbd9f746f67627eb3003ea..7bfd002f474883b88a38dcddbe16cbe07c246e10 100644 (file)
@@ -1,5 +1,7 @@
 # frozen_string_literal: true
+
 require 'sidekiq-scheduler'
+require 'sidekiq-bulk'
 
 class Scheduler::SubscriptionsScheduler
   include Sidekiq::Worker
@@ -7,9 +9,7 @@ class Scheduler::SubscriptionsScheduler
   def perform
     logger.info 'Queueing PuSH re-subscriptions'
 
-    expiring_accounts.pluck(:id).each do |id|
-      Pubsubhubbub::SubscribeWorker.perform_async(id)
-    end
+    Pubsubhubbub::SubscribeWorker.push_bulk(expiring_accounts.pluck(:id))
   end
 
   private
index 2782d05d27def0f305c36216b73fcece5a6f651f..ce76683c50839383657c6aea3933df01d45d5aa9 100644 (file)
@@ -1,13 +1,16 @@
 # frozen_string_literal: true
 
+require 'sidekiq-bulk'
+
 class SoftBlockDomainFollowersWorker
   include Sidekiq::Worker
 
   sidekiq_options queue: 'pull'
 
   def perform(account_id, domain)
-    Account.find(account_id).followers.where(domain: domain).pluck(:id).each do |follower_id|
-      SoftBlockWorker.perform_async(account_id, follower_id)
+    followers_id = Account.find(account_id).followers.where(domain: domain).pluck(:id)
+    SoftBlockWorker.push_bulk(followers_id) do |follower_id|
+      [account_id, follower_id]
     end
   end
 end