From c949887b1cdc2a2687acfe93d08cc544bf39fa39 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Wed, 2 Apr 2025 15:31:26 -0700 Subject: [PATCH] Add default key for limits_concurrency --- lib/active_job/concurrency_controls.rb | 3 ++- test/models/solid_queue/job_test.rb | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/active_job/concurrency_controls.rb b/lib/active_job/concurrency_controls.rb index 0ea290f6..c4876828 100644 --- a/lib/active_job/concurrency_controls.rb +++ b/lib/active_job/concurrency_controls.rb @@ -5,6 +5,7 @@ module ConcurrencyControls extend ActiveSupport::Concern DEFAULT_CONCURRENCY_GROUP = ->(*) { self.class.name } + DEFAULT_CONCURRENCY_KEY = ->(*) { nil } included do class_attribute :concurrency_key, instance_accessor: false @@ -15,7 +16,7 @@ module ConcurrencyControls end class_methods do - def limits_concurrency(key:, to: 1, group: DEFAULT_CONCURRENCY_GROUP, duration: SolidQueue.default_concurrency_control_period) + def limits_concurrency(key: DEFAULT_CONCURRENCY_KEY, to: 1, group: DEFAULT_CONCURRENCY_GROUP, duration: SolidQueue.default_concurrency_control_period) self.concurrency_key = key self.concurrency_limit = to self.concurrency_group = group diff --git a/test/models/solid_queue/job_test.rb b/test/models/solid_queue/job_test.rb index 17a658d7..b469a032 100644 --- a/test/models/solid_queue/job_test.rb +++ b/test/models/solid_queue/job_test.rb @@ -10,6 +10,13 @@ def perform(job_result) end end + class NonOverlappingDefaultJob < ApplicationJob + limits_concurrency + + def perform(job_result) + end + end + class NonOverlappingGroupedJob1 < NonOverlappingJob limits_concurrency key: ->(job_result, **) { job_result }, group: "MyGroup" end @@ -98,6 +105,16 @@ class NonOverlappingGroupedJob2 < NonOverlappingJob assert_equal active_job.concurrency_key, job.concurrency_key end + test "enqueue jobs with concurrency controls default options" do + active_job = NonOverlappingDefaultJob.perform_later(@result, name: "A") + assert_equal 1, active_job.concurrency_limit + assert_equal "SolidQueue::JobTest::NonOverlappingDefaultJob", active_job.concurrency_key + + job = SolidQueue::Job.last + assert_equal active_job.concurrency_limit, job.concurrency_limit + assert_equal active_job.concurrency_key, job.concurrency_key + end + test "enqueue jobs with concurrency controls in the same concurrency group" do assert_ready do active_job = NonOverlappingGroupedJob1.perform_later(@result, name: "A")