From 9255d68a525589ab59639b6b21674806768f7955 Mon Sep 17 00:00:00 2001
From: Terri Chu <tchu@gitlab.com>
Date: Fri, 25 Oct 2024 15:47:55 +0000
Subject: [PATCH] Do not delay indexing for dev envs

---
 .../search/elastic/trigger_indexing_worker.rb | 14 ++++++--
 .../elastic/trigger_indexing_worker_spec.rb   | 36 +++++++++++++++++--
 2 files changed, 45 insertions(+), 5 deletions(-)

diff --git a/ee/app/workers/search/elastic/trigger_indexing_worker.rb b/ee/app/workers/search/elastic/trigger_indexing_worker.rb
index 6122613e16fd3..525cdf1520f65 100644
--- a/ee/app/workers/search/elastic/trigger_indexing_worker.rb
+++ b/ee/app/workers/search/elastic/trigger_indexing_worker.rb
@@ -9,6 +9,7 @@ class TriggerIndexingWorker
 
       INITIAL_TASK = :initiate
       TASKS = %i[namespaces projects snippets users].freeze
+      DEFAULT_DELAY = 2.minutes
 
       data_consistency :delayed
 
@@ -55,15 +56,14 @@ def initiate
           ).execute
 
           logger.info('Setting `elasticsearch_indexing` has been enabled.')
-          self.class.perform_in(2.minutes, INITIAL_TASK, options)
+          reenqueue_initial_task
 
           return false
         end
 
         unless ::Gitlab::CurrentSettings.elasticsearch_pause_indexing?
           task_executor_service.execute(:pause_indexing)
-
-          self.class.perform_in(2.minutes, INITIAL_TASK, options)
+          reenqueue_initial_task
 
           return false
         end
@@ -87,6 +87,14 @@ def task_executor_service
       def logger
         @logger ||= ::Gitlab::Elasticsearch::Logger.build
       end
+
+      def reenqueue_initial_task
+        if Rails.env.development?
+          self.class.perform_async(INITIAL_TASK, options)
+        else
+          self.class.perform_in(DEFAULT_DELAY, INITIAL_TASK, options)
+        end
+      end
     end
   end
 end
diff --git a/ee/spec/workers/search/elastic/trigger_indexing_worker_spec.rb b/ee/spec/workers/search/elastic/trigger_indexing_worker_spec.rb
index 7508d78c3dbca..06e4856d20d9c 100644
--- a/ee/spec/workers/search/elastic/trigger_indexing_worker_spec.rb
+++ b/ee/spec/workers/search/elastic/trigger_indexing_worker_spec.rb
@@ -88,10 +88,24 @@
 
             it 'pauses indexing and reschedules itself' do
               expect(task_executor_service).to receive(:execute).with(:pause_indexing)
-              expect(described_class).to receive(:perform_in).with(2.minutes, described_class::INITIAL_TASK, {})
+              expect(described_class).to receive(:perform_in)
+                .with(described_class::DEFAULT_DELAY, described_class::INITIAL_TASK, {})
 
               expect(perform).to be false
             end
+
+            context 'when in development environment' do
+              before do
+                stub_rails_env('development')
+              end
+
+              it 'pauses indexing and runs itself without delay' do
+                expect(task_executor_service).to receive(:execute).with(:pause_indexing)
+                expect(described_class).to receive(:perform_async).with(described_class::INITIAL_TASK, {})
+
+                expect(perform).to be false
+              end
+            end
           end
 
           context 'when indexing is disabled' do
@@ -105,10 +119,28 @@
                 nil,
                 { elasticsearch_indexing: true }).and_call_original
               expect(task_executor_service).not_to receive(:execute)
-              expect(described_class).to receive(:perform_in).with(2.minutes, described_class::INITIAL_TASK, {})
+              expect(described_class).to receive(:perform_in)
+                .with(described_class::DEFAULT_DELAY, described_class::INITIAL_TASK, {})
 
               expect(perform).to be false
             end
+
+            context 'when in development environment' do
+              before do
+                stub_rails_env('development')
+              end
+
+              it 'enables indexing and runs itself without delay' do
+                expect(ApplicationSettings::UpdateService).to receive(:new).with(
+                  Gitlab::CurrentSettings.current_application_settings,
+                  nil,
+                  { elasticsearch_indexing: true }).and_call_original
+                expect(task_executor_service).not_to receive(:execute)
+                expect(described_class).to receive(:perform_async).with(described_class::INITIAL_TASK, {})
+
+                expect(perform).to be false
+              end
+            end
           end
         end
       end
-- 
GitLab