From 407aea859f356c00812bfa23054c1585bdb12555 Mon Sep 17 00:00:00 2001 From: Muhammad Sohaib Date: Wed, 29 Mar 2023 21:57:47 +0500 Subject: [PATCH 1/2] Feature: StopAndPauseJobsWorkRake : stop or pause the jobs:work rake depending on the files available in the root dir --- lib/delayed/worker.rb | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/delayed/worker.rb b/lib/delayed/worker.rb index 7b983a206..9f6555e21 100644 --- a/lib/delayed/worker.rb +++ b/lib/delayed/worker.rb @@ -309,8 +309,12 @@ def handle_failed_job(job, error) # Run the next job we can get an exclusive lock on. # If no jobs are left we return nil def reserve_and_run_one_job - job = reserve_job - self.class.lifecycle.run_callbacks(:perform, self, job) { run(job) } if job + stop_worker = end_rake_task if File.file?('stop_dj_worker.txt') + pause_worker = pause_rake_task if File.file?('pause_dj_worker.txt') + unless stop_worker || pause_worker + job = reserve_job + self.class.lifecycle.run_callbacks(:perform, self, job) { run(job) } if job + end end def reserve_job @@ -334,6 +338,19 @@ def reload! ActionDispatch::Reloader.prepare! end end + + def end_rake_task + puts 'killing worker task' + File.open('dj_worker_stopped.txt', 'a') { |f| f.write("#{Process.pid}\n") } + Process.kill("INT", Process.pid) + sleep(100) + true + end + + def pause_rake_task + puts 'worker paused' + true + end end end From 4d4f49dd2bcaf105713bd6091197f0abee690394 Mon Sep 17 00:00:00 2001 From: Muhammad Sohaib Date: Fri, 31 Mar 2023 00:26:32 +0500 Subject: [PATCH 2/2] Feature: StopAndPauseJobsWorkRake : stop or pause the jobs:work rake depending on the files available in the root dir --- lib/delayed/worker.rb | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/delayed/worker.rb b/lib/delayed/worker.rb index 7b983a206..9f6555e21 100644 --- a/lib/delayed/worker.rb +++ b/lib/delayed/worker.rb @@ -309,8 +309,12 @@ def handle_failed_job(job, error) # Run the next job we can get an exclusive lock on. # If no jobs are left we return nil def reserve_and_run_one_job - job = reserve_job - self.class.lifecycle.run_callbacks(:perform, self, job) { run(job) } if job + stop_worker = end_rake_task if File.file?('stop_dj_worker.txt') + pause_worker = pause_rake_task if File.file?('pause_dj_worker.txt') + unless stop_worker || pause_worker + job = reserve_job + self.class.lifecycle.run_callbacks(:perform, self, job) { run(job) } if job + end end def reserve_job @@ -334,6 +338,19 @@ def reload! ActionDispatch::Reloader.prepare! end end + + def end_rake_task + puts 'killing worker task' + File.open('dj_worker_stopped.txt', 'a') { |f| f.write("#{Process.pid}\n") } + Process.kill("INT", Process.pid) + sleep(100) + true + end + + def pause_rake_task + puts 'worker paused' + true + end end end