Skip to content

Commit 776df14

Browse files
rosaflavorjones
authored andcommitted
Guard usage of new process_name to link claimed executions
We can only use this if new migrations have been run. If not, we just emit a deprecation warning and continue as before.
1 parent 05394c1 commit 776df14

File tree

4 files changed

+36
-6
lines changed

4 files changed

+36
-6
lines changed

app/models/solid_queue/claimed_execution.rb

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,18 @@
11
# frozen_string_literal: true
22

33
class SolidQueue::ClaimedExecution < SolidQueue::Execution
4-
belongs_to :process, primary_key: :name, foreign_key: :process_name
4+
def self.process_name_column_exists?
5+
column_names.include?("process_name")
6+
end
7+
8+
if process_name_column_exists?
9+
belongs_to :process, primary_key: :name, foreign_key: :process_name
10+
else
11+
warn_about_pending_migrations
12+
13+
belongs_to :process
14+
attr_accessor :process_name
15+
end
516

617
scope :orphaned, -> { where.missing(:process) }
718

@@ -13,7 +24,10 @@ def success?
1324

1425
class << self
1526
def claiming(job_ids, process, &block)
16-
process_data = { process_id: process.id, process_name: process.name }
27+
process_data = { process_id: process.id }.tap do |hsh|
28+
hsh[:process_name] = process.name if process_name_column_exists?
29+
end
30+
1731
job_data = Array(job_ids).collect { |job_id| { job_id: job_id }.merge(process_data) }
1832

1933
SolidQueue.instrument(:claim, job_ids: job_ids, **process_data) do |payload|
@@ -47,8 +61,8 @@ def fail_all_with(error)
4761
execution.unblock_next_job
4862
end
4963

50-
payload[:process_ids] = executions.map(&:process_id).uniq
51-
payload[:process_names] = executions.map(&:process_name).uniq
64+
payload[:process_ids] = executions.map(&:process_id).uniq.presence
65+
payload[:process_names] = executions.map(&:process_name).uniq.presence
5266
payload[:job_ids] = executions.map(&:job_id).uniq
5367
payload[:size] = executions.size
5468
end

app/models/solid_queue/process/executor.rb

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,13 @@ module Executor
66
extend ActiveSupport::Concern
77

88
included do
9-
has_many :claimed_executions, primary_key: :name, foreign_key: :process_name
9+
if ClaimedExecution.process_name_column_exists?
10+
has_many :claimed_executions, primary_key: :name, foreign_key: :process_name
11+
else
12+
warn_about_pending_migrations
13+
14+
has_many :claimed_executions
15+
end
1016

1117
after_destroy :release_all_claimed_executions
1218
end

app/models/solid_queue/record.rb

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,16 @@ def supports_insert_conflict_target?
2020
connection.supports_insert_conflict_target?
2121
end
2222
end
23+
24+
def warn_about_pending_migrations
25+
SolidQueue.deprecator.warn(<<~DEPRECATION)
26+
Solid Queue has pending database migrations. To get the new migration files, run:
27+
rails solid_queue:update
28+
And then:
29+
rails db:migrate
30+
These migrations will be required after version 2.0
31+
DEPRECATION
32+
end
2333
end
2434
end
2535
end

test/integration/processes_lifecycle_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ class ProcessesLifecycleTest < ActiveSupport::TestCase
271271

272272
private
273273
def assert_clean_termination
274-
wait_for_registered_processes 0, timeout: 0.2.second
274+
wait_for_registered_processes 0, timeout: 0.5.second
275275
assert_no_registered_processes
276276
assert_no_claimed_jobs
277277
assert_not process_exists?(@pid)

0 commit comments

Comments
 (0)