From ae3d5e603e743ba84f774b41b5a93ca8bb91fea6 Mon Sep 17 00:00:00 2001 From: genya0407 Date: Mon, 2 Mar 2026 13:02:42 +0900 Subject: [PATCH] Avoid unintended FOR UPDATE query execution. Without `#to_a`, `select_candidates` returns an `ActiveRecord::Relation`. Consequently, `executeions.none?` inside the `lock_candidates` method triggers an unintended query: ``` SELECT 1 AS one FROM `solid_queue_ready_executions` LIMIT 1 FOR UPDATE SKIP LOCKED; ``` --- app/models/solid_queue/ready_execution.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/models/solid_queue/ready_execution.rb b/app/models/solid_queue/ready_execution.rb index 35a11292..ea14c193 100644 --- a/app/models/solid_queue/ready_execution.rb +++ b/app/models/solid_queue/ready_execution.rb @@ -30,7 +30,8 @@ def select_and_lock(queue_relation, process_id, limit) end def select_candidates(queue_relation, limit) - queue_relation.ordered.limit(limit).non_blocking_lock.select(:id, :job_id) + # Force query execution here with #to_a to avoid unintended FOR UPDATE query executions + queue_relation.ordered.limit(limit).non_blocking_lock.select(:id, :job_id).to_a end def lock_candidates(executions, process_id)