File tree Expand file tree Collapse file tree 3 files changed +43
-0
lines changed Expand file tree Collapse file tree 3 files changed +43
-0
lines changed Original file line number Diff line number Diff line change @@ -30,6 +30,12 @@ def run
30
30
loop do
31
31
break if shutting_down?
32
32
33
+ recurring_schedule . schedule_new_dynamic_tasks . tap do |new_tasks |
34
+ if new_tasks . any?
35
+ process . update_columns ( metadata : metadata . compact )
36
+ end
37
+ end
38
+
33
39
interruptible_sleep ( SLEEP_INTERVAL )
34
40
end
35
41
ensure
Original file line number Diff line number Diff line change @@ -31,6 +31,12 @@ def dynamic_tasks
31
31
SolidQueue ::RecurringTask . dynamic
32
32
end
33
33
34
+ def schedule_new_dynamic_tasks
35
+ dynamic_tasks . where . not ( key : scheduled_tasks . keys ) . each do |task |
36
+ schedule_task ( task )
37
+ end
38
+ end
39
+
34
40
def schedule_task ( task )
35
41
scheduled_tasks [ task . key ] = schedule ( task )
36
42
end
Original file line number Diff line number Diff line change @@ -68,4 +68,35 @@ class SchedulerTest < ActiveSupport::TestCase
68
68
assert_equal 1 , run_at_times [ i + 1 ] - run_at_times [ i ]
69
69
end
70
70
end
71
+
72
+ test "updates metadata after adding dynamic task post-start" do
73
+ scheduler = SolidQueue ::Scheduler . new ( recurring_tasks : { } ) . tap do |s |
74
+ s . define_singleton_method ( :interruptible_sleep ) { |interval | } # avoid real sleeping
75
+ s . start
76
+ end
77
+
78
+ wait_for_registered_processes ( 1 , timeout : 1 . second )
79
+
80
+ process = SolidQueue ::Process . first
81
+ # initially there are no recurring_schedule keys
82
+ assert process . metadata , { }
83
+
84
+ # now create a dynamic task after the scheduler has booted
85
+ SolidQueue ::RecurringTask . create (
86
+ key : "new_dynamic_task" ,
87
+ static : false ,
88
+ class_name : "AddToBufferJob" ,
89
+ schedule : "every second" ,
90
+ arguments : [ 42 ]
91
+ )
92
+
93
+ sleep 1
94
+
95
+ process . reload
96
+
97
+ # metadata should now include the new key
98
+ assert_metadata process , recurring_schedule : [ "new_dynamic_task" ]
99
+ ensure
100
+ scheduler &.stop
101
+ end
71
102
end
You can’t perform that action at this time.
0 commit comments