From f6e097601175c7b6050cb84d5e237fc7b9fbc7fc Mon Sep 17 00:00:00 2001 From: Andrew Fader Date: Thu, 22 Oct 2026 02:26:04 -0400 Subject: [PATCH 1/2] Create executions from the job record instead of its id --- .../solid_queue/job/concurrency_controls.rb | 2 +- app/models/solid_queue/job/executable.rb | 2 +- app/models/solid_queue/job/schedulable.rb | 2 +- test/models/solid_queue/job_test.rb | 15 +++++++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/models/solid_queue/job/concurrency_controls.rb b/app/models/solid_queue/job/concurrency_controls.rb index b59c464ad..88bcea38f 100644 --- a/app/models/solid_queue/job/concurrency_controls.rb +++ b/app/models/solid_queue/job/concurrency_controls.rb @@ -63,7 +63,7 @@ def handle_concurrency_conflict end def block - BlockedExecution.create_or_find_by!(job_id: id) + BlockedExecution.create_or_find_by!(job: self) end def release_next_blocked_job diff --git a/app/models/solid_queue/job/executable.rb b/app/models/solid_queue/job/executable.rb index 75a5d2111..03605c243 100644 --- a/app/models/solid_queue/job/executable.rb +++ b/app/models/solid_queue/job/executable.rb @@ -106,7 +106,7 @@ def discard private def ready - ReadyExecution.create_or_find_by!(job_id: id) + ReadyExecution.create_or_find_by!(job: self) end def execution diff --git a/app/models/solid_queue/job/schedulable.rb b/app/models/solid_queue/job/schedulable.rb index 04419aa61..c8bfb0a81 100644 --- a/app/models/solid_queue/job/schedulable.rb +++ b/app/models/solid_queue/job/schedulable.rb @@ -38,7 +38,7 @@ def scheduled? private def schedule - ScheduledExecution.create_or_find_by!(job_id: id) + ScheduledExecution.create_or_find_by!(job: self) end def execution diff --git a/test/models/solid_queue/job_test.rb b/test/models/solid_queue/job_test.rb index 7e9c1568f..3a4dc5bbf 100644 --- a/test/models/solid_queue/job_test.rb +++ b/test/models/solid_queue/job_test.rb @@ -41,6 +41,21 @@ class DiscardableNonOverlappingGroupedJob2 < NonOverlappingJob ) end + test "enqueue does not reload the job to create its execution" do + job_selects = [] + callback = ->(*, payload) { job_selects << payload[:sql] if payload[:sql].match?(/\ASELECT .*solid_queue_jobs/i) } + + ActiveSupport::Notifications.subscribed(callback, "sql.active_record") do + AddToBufferJob.perform_later(1) + AddToBufferJob.set(wait: 1.minute).perform_later(2) + 2.times { NonOverlappingJob.perform_later(@result) } + end + + assert SolidQueue::BlockedExecution.exists? + + assert_empty job_selects + end + test "enqueue active job to be executed right away" do active_job = AddToBufferJob.new(1).set(priority: 8, queue: "test") From 2f824cf2fcefa2b8a34ac661a834a0822d2c5155 Mon Sep 17 00:00:00 2001 From: Andrew Fader Date: Sat, 24 Oct 2026 00:28:08 -0400 Subject: [PATCH 2/2] Pin json < 3 for Rails 7.1 and 8.0 appraisals --- Appraisals | 2 ++ gemfiles/rails_7_1.gemfile | 1 + gemfiles/rails_8_0.gemfile | 1 + 3 files changed, 4 insertions(+) diff --git a/Appraisals b/Appraisals index 303c1cc76..74f71ad7a 100644 --- a/Appraisals +++ b/Appraisals @@ -2,6 +2,7 @@ appraise "rails-7-1" do gem "railties", "~> 7.1.0" + gem "json", "< 3" end appraise "rails-7-2" do @@ -10,6 +11,7 @@ end appraise "rails-8-0" do gem "railties", "~> 8.0.0" + gem "json", "< 3" end appraise "rails-8-1" do diff --git a/gemfiles/rails_7_1.gemfile b/gemfiles/rails_7_1.gemfile index 036d98368..5fd12a49c 100644 --- a/gemfiles/rails_7_1.gemfile +++ b/gemfiles/rails_7_1.gemfile @@ -3,5 +3,6 @@ source "https://rubygems.org" gem "railties", "~> 7.1.0" +gem "json", "< 3" gemspec path: "../" diff --git a/gemfiles/rails_8_0.gemfile b/gemfiles/rails_8_0.gemfile index 28bd9f00e..297d3f85c 100644 --- a/gemfiles/rails_8_0.gemfile +++ b/gemfiles/rails_8_0.gemfile @@ -3,5 +3,6 @@ source "https://rubygems.org" gem "railties", "~> 8.0.0" +gem "json", "< 3" gemspec path: "../"