Skip to content

Commit

Permalink
Don't have a default key for concurrency controls, force always a cho…
Browse files Browse the repository at this point in the history
…ice there

This is less surprising and helps making it clear what the key is.
  • Loading branch information
rosa committed Nov 23, 2023
1 parent 427482e commit 41a63f5
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 8 deletions.
9 changes: 4 additions & 5 deletions lib/active_job/concurrency_controls.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,22 @@ module ActiveJob
module ConcurrencyControls
extend ActiveSupport::Concern

DEFAULT_CONCURRENCY_KEY = ->(*args) { args&.first }
DEFAULT_CONCURRENCY_GROUP = ->(*) { self.class.name }

included do
class_attribute :concurrency_key, default: DEFAULT_CONCURRENCY_KEY, instance_accessor: false
class_attribute :concurrency_key, instance_accessor: false
class_attribute :concurrency_group, default: DEFAULT_CONCURRENCY_GROUP, instance_accessor: false

class_attribute :concurrency_limit, default: 0 # No limit
class_attribute :concurrency_duration, default: SolidQueue.default_concurrency_control_period
end

class_methods do
def limits_concurrency(to: 1, key: DEFAULT_CONCURRENCY_KEY, group: DEFAULT_CONCURRENCY_GROUP, duration: SolidQueue.default_concurrency_control_period)
self.concurrency_limit = to
def limits_concurrency(key:, to: 1, group: DEFAULT_CONCURRENCY_GROUP, duration: SolidQueue.default_concurrency_control_period)
self.concurrency_key = key
self.concurrency_duration = duration
self.concurrency_limit = to
self.concurrency_group = group
self.concurrency_duration = duration
end
end

Expand Down
6 changes: 3 additions & 3 deletions test/models/solid_queue/job_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@

class SolidQueue::JobTest < ActiveSupport::TestCase
class NonOverlappingJob < ApplicationJob
limits_concurrency # Using all defaults
limits_concurrency key: ->(job_result) { job_result }

def perform(job_result)
end
end

class NonOverlappingGroupedJob1 < NonOverlappingJob
limits_concurrency group: "MyGroup"
limits_concurrency key: ->(job_result) { job_result }, group: "MyGroup"
end

class NonOverlappingGroupedJob2 < NonOverlappingJob
limits_concurrency group: "MyGroup"
limits_concurrency key: ->(job_result) { job_result }, group: "MyGroup"
end

setup do
Expand Down

0 comments on commit 41a63f5

Please sign in to comment.