Skip to content

Commit 3f9b089

Browse files
committed
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 97245ed commit 3f9b089

File tree

4 files changed

+43
-11
lines changed

4 files changed

+43
-11
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|
@@ -45,8 +59,8 @@ def fail_all_with(error)
4559
execution.unblock_next_job
4660
end
4761

48-
payload[:process_ids] = executions.map(&:process_id).uniq
49-
payload[:process_names] = executions.map(&:process_name).uniq
62+
payload[:process_ids] = executions.map(&:process_id).uniq.presence
63+
payload[:process_names] = executions.map(&:process_name).uniq.presence
5064
payload[:job_ids] = executions.map(&:job_id).uniq
5165
payload[:size] = executions.size
5266
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: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,23 @@ class Record < ActiveRecord::Base
66

77
connects_to(**SolidQueue.connects_to) if SolidQueue.connects_to
88

9-
def self.non_blocking_lock
10-
if SolidQueue.use_skip_locked
11-
lock(Arel.sql("FOR UPDATE SKIP LOCKED"))
12-
else
13-
lock
9+
class << self
10+
def non_blocking_lock
11+
if SolidQueue.use_skip_locked
12+
lock(Arel.sql("FOR UPDATE SKIP LOCKED"))
13+
else
14+
lock
15+
end
16+
end
17+
18+
def warn_about_pending_migrations
19+
SolidQueue.deprecator.warn(<<~DEPRECATION)
20+
Solid Queue has pending database migrations. To get the new migration files, run:
21+
rails solid_queue:update
22+
And then:
23+
rails db:migrate
24+
These migrations will be required after version 2.0
25+
DEPRECATION
1426
end
1527
end
1628
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)