From e263db276fdc05dab743400977606efe98f1e949 Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Sun, 27 Aug 2023 22:38:01 +0200
Subject: [PATCH] Change indexing jobs to use database replica (#26692)

---
 app/workers/add_to_public_statuses_index_worker.rb | 11 ++++++++---
 app/workers/scheduler/indexing_scheduler.rb        |  6 +++++-
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/app/workers/add_to_public_statuses_index_worker.rb b/app/workers/add_to_public_statuses_index_worker.rb
index 33529a4c1..80d921eab 100644
--- a/app/workers/add_to_public_statuses_index_worker.rb
+++ b/app/workers/add_to_public_statuses_index_worker.rb
@@ -2,15 +2,20 @@
 
 class AddToPublicStatusesIndexWorker
   include Sidekiq::Worker
+  include DatabaseHelper
 
   sidekiq_options queue: 'pull'
 
   def perform(account_id)
-    account = Account.find(account_id)
+    with_primary do
+      @account = Account.find(account_id)
+    end
 
-    return unless account.indexable?
+    return unless @account.indexable?
 
-    account.add_to_public_statuses_index!
+    with_read_replica do
+      @account.add_to_public_statuses_index!
+    end
   rescue ActiveRecord::RecordNotFound
     true
   end
diff --git a/app/workers/scheduler/indexing_scheduler.rb b/app/workers/scheduler/indexing_scheduler.rb
index 6c770d5a8..1b09730c7 100644
--- a/app/workers/scheduler/indexing_scheduler.rb
+++ b/app/workers/scheduler/indexing_scheduler.rb
@@ -3,6 +3,7 @@
 class Scheduler::IndexingScheduler
   include Sidekiq::Worker
   include Redisable
+  include DatabaseHelper
 
   sidekiq_options retry: 0, lock: :until_executed, lock_ttl: 1.day.to_i
 
@@ -15,7 +16,10 @@ class Scheduler::IndexingScheduler
     indexes.each do |type|
       with_redis do |redis|
         redis.sscan_each("chewy:queue:#{type.name}", count: SCAN_BATCH_SIZE).each_slice(IMPORT_BATCH_SIZE) do |ids|
-          type.import!(ids)
+          with_read_replica do
+            type.import!(ids)
+          end
+
           redis.srem("chewy:queue:#{type.name}", ids)
         end
       end