Skip to content

Commit 2362ce9

Browse files
committed
Support new persisted recurring tasks in Solid Queue
See rails/solid_queue#272
1 parent 56ddbe1 commit 2362ce9

File tree

6 files changed

+60
-29
lines changed

6 files changed

+60
-29
lines changed

Gemfile.lock

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ GEM
105105
base64 (0.2.0)
106106
bigdecimal (3.1.7)
107107
builder (3.2.4)
108-
concurrent-ruby (1.2.3)
108+
concurrent-ruby (1.3.3)
109109
connection_pool (2.4.1)
110110
crass (1.0.6)
111111
date (3.3.4)
@@ -116,8 +116,8 @@ GEM
116116
erubi (1.12.0)
117117
et-orbi (1.2.11)
118118
tzinfo
119-
fugit (1.9.0)
120-
et-orbi (~> 1, >= 1.2.7)
119+
fugit (1.11.0)
120+
et-orbi (~> 1, >= 1.2.11)
121121
raabro (~> 1.4)
122122
globalid (1.2.1)
123123
activesupport (>= 6.1)
@@ -288,11 +288,11 @@ GEM
288288
rack-protection (= 4.0.0)
289289
rack-session (>= 2.0.0, < 3)
290290
tilt (~> 2.0)
291-
solid_queue (0.3.0)
291+
solid_queue (0.4.1)
292292
activejob (>= 7.1)
293293
activerecord (>= 7.1)
294-
concurrent-ruby (~> 1.2.2)
295-
fugit (~> 1.9.0)
294+
concurrent-ruby (>= 1.3.1)
295+
fugit (~> 1.11.0)
296296
railties (>= 7.1)
297297
sprockets (4.2.1)
298298
concurrent-ruby (~> 1.0)
@@ -351,7 +351,7 @@ DEPENDENCIES
351351
rubocop-performance
352352
rubocop-rails-omakase
353353
selenium-webdriver
354-
solid_queue
354+
solid_queue (>= 0.4.1)
355355
sprockets-rails
356356
sqlite3
357357

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ This library extends Active Job with a querying interface and the following sett
6565
## Adapter Specifics
6666

6767
- **Resque**: Queue pausing is supported only if you have `resque-pause` installed in your project
68+
- **Solid Queue**: Requires version >= 0.4.1.
6869

6970
## Advanced configuration
7071

lib/active_job/queue_adapters/solid_queue_ext/recurring_tasks.rb

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,29 @@ def supports_recurring_tasks?
44
end
55

66
def recurring_tasks
7-
tasks = recurring_tasks_from_dispatchers
8-
last_enqueued_at_times = recurring_task_last_enqueued_at(tasks.keys)
7+
tasks = SolidQueue::RecurringTask.all
8+
last_enqueued_at_times = recurring_task_last_enqueued_at(tasks.map(&:key))
99

10-
recurring_tasks_from_dispatchers.collect do |task_id, task_attrs|
11-
recurring_task_attributes_from_solid_queue_task_attributes(task_attrs).merge \
12-
id: task_id,
13-
last_enqueued_at: last_enqueued_at_times[task_id]
10+
tasks.collect do |task|
11+
recurring_task_attributes_from_solid_queue_recurring_task(task).merge \
12+
last_enqueued_at: last_enqueued_at_times[task.key]
1413
end
1514
end
1615

1716
def find_recurring_task(task_id)
18-
if task_attrs = recurring_tasks_from_dispatchers[task_id]
19-
recurring_task_attributes_from_solid_queue_task_attributes(task_attrs).merge \
20-
id: task_id,
21-
last_enqueued_at: recurring_task_last_enqueued_at(task_id).values&.first
17+
if task = SolidQueue::RecurringTask.find_by(key: task_id)
18+
recurring_task_attributes_from_solid_queue_recurring_task(task).merge \
19+
last_enqueued_at: recurring_task_last_enqueued_at(task.key).values&.first
2220
end
2321
end
2422

2523
private
26-
def recurring_tasks_from_dispatchers
27-
SolidQueue::Process.where(kind: "Dispatcher").flat_map do |process|
28-
process.metadata["recurring_schedule"]
29-
end.compact.reduce({}, &:merge)
30-
end
31-
32-
def recurring_task_attributes_from_solid_queue_task_attributes(task_attributes)
24+
def recurring_task_attributes_from_solid_queue_recurring_task(task)
3325
{
34-
job_class_name: task_attributes["class_name"],
35-
arguments: task_attributes["arguments"],
36-
schedule: task_attributes["schedule"]
26+
id: task.key,
27+
job_class_name: task.class_name,
28+
arguments: task.arguments,
29+
schedule: task.schedule
3730
}
3831
end
3932

mission_control-jobs.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
2323
spec.add_dependency "irb", "~> 1.13"
2424

2525
spec.add_development_dependency "resque"
26-
spec.add_development_dependency "solid_queue"
26+
spec.add_development_dependency "solid_queue", ">= 0.4.1"
2727
spec.add_development_dependency "selenium-webdriver"
2828
spec.add_development_dependency "resque-pause"
2929
spec.add_development_dependency "mocha"
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# This migration comes from solid_queue (originally 20240719134516)
2+
class CreateRecurringTasks < ActiveRecord::Migration[7.1]
3+
def change
4+
create_table :solid_queue_recurring_tasks do |t|
5+
t.string :key, null: false, index: { unique: true }
6+
t.string :schedule, null: false
7+
t.string :command, limit: 2048
8+
t.string :class_name
9+
t.text :arguments
10+
11+
t.string :queue_name
12+
t.integer :priority, default: 0
13+
14+
t.boolean :static, default: true, index: true
15+
16+
t.text :description
17+
18+
t.timestamps
19+
end
20+
end
21+
end

test/dummy/db/schema.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#
1111
# It's strongly recommended that you check this file into your version control system.
1212

13-
ActiveRecord::Schema[7.1].define(version: 2023_09_14_113326) do
13+
ActiveRecord::Schema[7.1].define(version: 2024_08_06_160416) do
1414
create_table "posts", force: :cascade do |t|
1515
t.string "title"
1616
t.text "body"
@@ -100,6 +100,22 @@
100100
t.index ["task_key", "run_at"], name: "index_solid_queue_recurring_executions_on_task_key_and_run_at", unique: true
101101
end
102102

103+
create_table "solid_queue_recurring_tasks", force: :cascade do |t|
104+
t.string "key", null: false
105+
t.string "schedule", null: false
106+
t.string "command", limit: 2048
107+
t.string "class_name"
108+
t.text "arguments"
109+
t.string "queue_name"
110+
t.integer "priority", default: 0
111+
t.boolean "static", default: true
112+
t.text "description"
113+
t.datetime "created_at", null: false
114+
t.datetime "updated_at", null: false
115+
t.index ["key"], name: "index_solid_queue_recurring_tasks_on_key", unique: true
116+
t.index ["static"], name: "index_solid_queue_recurring_tasks_on_static"
117+
end
118+
103119
create_table "solid_queue_scheduled_executions", force: :cascade do |t|
104120
t.integer "job_id", null: false
105121
t.string "queue_name", null: false

0 commit comments

Comments
 (0)