diff --git a/Changes.md b/Changes.md index 1d140f06..acd908dc 100644 --- a/Changes.md +++ b/Changes.md @@ -21,7 +21,7 @@ end require "sidekiq/middleware/current_attributes" Sidekiq::CurrentAttributes.persist(Myapp::Current) # Your AS::CurrentAttributes singleton ``` -- Implement `queue_as` and `wait_until` for ActiveJob compatibility [#5003] +- Implement `queue_as`, `wait` and `wait_until` for ActiveJob compatibility [#5003] - Retry Redis operation if we get an `UNBLOCKED` Redis error. [#4985] - Run existing signal traps, if any, before running Sidekiq's trap. [#4991] diff --git a/lib/sidekiq/worker.rb b/lib/sidekiq/worker.rb index 1500db9c..e85a9488 100644 --- a/lib/sidekiq/worker.rb +++ b/lib/sidekiq/worker.rb @@ -176,12 +176,12 @@ module Sidekiq @opts = opts # ActiveJob compatibility - interval = @opts.delete(:wait_until) + interval = @opts.delete(:wait_until) || @opts.delete(:wait) at(interval) if interval end def set(options) - interval = options.delete(:wait_until) + interval = options.delete(:wait_until) || options.delete(:wait) @opts.merge!(options) at(interval) if interval self @@ -204,6 +204,7 @@ module Sidekiq int = interval.to_f now = Time.now.to_f ts = (int < 1_000_000_000 ? now + int : int) + # Optimization to enqueue something now that is scheduled to go out now or in the past @opts["at"] = ts if ts > now self end diff --git a/test/test_worker.rb b/test/test_worker.rb index 76f5ca16..dfe6e7de 100644 --- a/test/test_worker.rb +++ b/test/test_worker.rb @@ -16,9 +16,12 @@ describe Sidekiq::Worker do it "provides basic ActiveJob compatibilility" do q = Sidekiq::ScheduledSet.new assert_equal 0, q.size - jid = SetWorker.set(wait_until: 1.hour).perform_async(123) + jid = SetWorker.set(wait_until: 1.hour.from_now).perform_async(123) assert jid assert_equal 1, q.size + jid = SetWorker.set(wait: 1.hour).perform_async(123) + assert jid + assert_equal 2, q.size q = Sidekiq::Queue.new("foo") assert_equal 0, q.size