Skip to content

Commit 367ebc9

Browse files
committed
Fix abstraction for RecurringSchedule and Process
1 parent 21031c7 commit 367ebc9

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

lib/solid_queue/processes/registrable.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,9 @@ def heartbeat
5858
self.process = nil
5959
wake_up
6060
end
61+
62+
def refresh_registered_process
63+
process.update_columns(metadata: metadata.compact)
64+
end
6165
end
6266
end

lib/solid_queue/scheduler.rb

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,8 @@ def run
3030
loop do
3131
break if shutting_down?
3232

33-
recurring_schedule.update_scheduled_tasks.tap do |updated_tasks|
34-
if updated_tasks.any?
35-
process.update_columns(metadata: metadata.compact)
36-
end
37-
end
33+
recurring_schedule.reload!
34+
refresh_registered_process if recurring_schedule.changed?
3835

3936
interruptible_sleep(polling_interval)
4037
end

lib/solid_queue/scheduler/recurring_schedule.rb

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ module SolidQueue
44
class Scheduler::RecurringSchedule
55
include AppExecutor
66

7-
attr_reader :static_tasks, :configured_tasks, :scheduled_tasks
7+
attr_reader :static_tasks, :configured_tasks, :scheduled_tasks, :changes
88

99
def initialize(tasks)
1010
@static_tasks = Array(tasks).map { |task| SolidQueue::RecurringTask.wrap(task) }.select(&:valid?)
1111
@configured_tasks = @static_tasks + dynamic_tasks
1212
@scheduled_tasks = Concurrent::Hash.new
13+
@changes = Concurrent::Hash.new
1314
end
1415

1516
def empty?
@@ -44,10 +45,6 @@ def unschedule_old_dynamic_tasks
4445
end
4546
end
4647

47-
def update_scheduled_tasks
48-
schedule_new_dynamic_tasks + unschedule_old_dynamic_tasks
49-
end
50-
5148
def schedule_task(task)
5249
scheduled_tasks[task.key] = schedule(task)
5350
end
@@ -65,6 +62,21 @@ def task_keys
6562
static_task_keys + dynamic_tasks.map(&:key)
6663
end
6764

65+
def reload!
66+
{ added_tasks: schedule_new_dynamic_tasks,
67+
removed_tasks: unschedule_old_dynamic_tasks }.each do |key, values|
68+
if values.any?
69+
changes[key] = values
70+
else
71+
changes.delete(key)
72+
end
73+
end
74+
end
75+
76+
def changed?
77+
@changes.any?
78+
end
79+
6880
private
6981
def persist_static_tasks
7082
SolidQueue::RecurringTask.static.where.not(key: static_task_keys).delete_all

0 commit comments

Comments
 (0)