2016-11-22 23:39:00 -05:00
|
|
|
|
# frozen_string_literal: true
|
2022-03-03 12:50:03 -08:00
|
|
|
|
|
|
|
|
|
require_relative "helper"
|
|
|
|
|
require "sidekiq/scheduled"
|
|
|
|
|
require "sidekiq/job_retry"
|
|
|
|
|
require "sidekiq/api"
|
2012-03-17 18:22:56 -07:00
|
|
|
|
|
2022-05-31 13:37:31 -07:00
|
|
|
|
class SomeWorker
|
|
|
|
|
include Sidekiq::Worker
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
|
2022-05-31 13:37:31 -07:00
|
|
|
|
class BadErrorMessage < StandardError
|
|
|
|
|
def message
|
|
|
|
|
raise "Ahhh, this isn't supposed to happen"
|
|
|
|
|
end
|
|
|
|
|
end
|
2019-01-31 14:25:00 -05:00
|
|
|
|
|
2022-05-31 13:37:31 -07:00
|
|
|
|
describe Sidekiq::JobRetry do
|
|
|
|
|
before do
|
|
|
|
|
Sidekiq.redis { |c| c.flushdb }
|
|
|
|
|
@config = Sidekiq
|
|
|
|
|
@config[:max_retries] = 25
|
|
|
|
|
@config[:error_handlers] << Sidekiq.method(:default_error_handler)
|
|
|
|
|
end
|
2012-03-17 18:22:56 -07:00
|
|
|
|
|
2022-05-31 13:37:31 -07:00
|
|
|
|
describe "middleware" do
|
2015-09-22 12:48:43 -07:00
|
|
|
|
def worker
|
|
|
|
|
@worker ||= SomeWorker.new
|
2012-03-17 18:22:56 -07:00
|
|
|
|
end
|
|
|
|
|
|
2022-05-31 13:37:31 -07:00
|
|
|
|
def handler
|
|
|
|
|
@handler ||= Sidekiq::JobRetry.new(@config)
|
2014-05-17 20:47:58 -07:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
def jobstr(options = {})
|
|
|
|
|
Sidekiq.dump_json({"class" => "Bob", "args" => [1, 2, "foo"], "retry" => true}.merge(options))
|
2019-10-08 07:48:39 +03:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def job
|
|
|
|
|
Sidekiq::RetrySet.new.first
|
2013-06-25 11:07:45 -04:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "retries with a nil worker" do
|
2017-01-17 14:58:08 -08:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.global(jobstr, "default") do
|
2017-01-17 14:58:08 -08:00
|
|
|
|
raise "boom"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
assert_equal 1, Sidekiq::RetrySet.new.size
|
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "allows disabling retry" do
|
2012-04-01 19:53:45 -07:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr("retry" => false), "default") do
|
2012-04-01 19:53:45 -07:00
|
|
|
|
raise "kerblammo!"
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 0, Sidekiq::RetrySet.new.size
|
2012-04-01 19:53:45 -07:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "allows a numeric retry" do
|
2012-11-09 21:18:02 -08:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr("retry" => 2), "default") do
|
2012-11-09 21:18:02 -08:00
|
|
|
|
raise "kerblammo!"
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 1, Sidekiq::RetrySet.new.size
|
|
|
|
|
assert_equal 0, Sidekiq::DeadSet.new.size
|
2012-11-09 21:18:02 -08:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "allows 0 retry => no retry and dead queue" do
|
2015-07-10 12:45:18 +02:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr("retry" => 0), "default") do
|
2015-07-10 12:45:18 +02:00
|
|
|
|
raise "kerblammo!"
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 0, Sidekiq::RetrySet.new.size
|
|
|
|
|
assert_equal 1, Sidekiq::DeadSet.new.size
|
2015-07-10 12:45:18 +02:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "handles zany characters in error message, #1705" do
|
|
|
|
|
skip "skipped! test requires ruby 2.1+" if RUBY_VERSION <= "2.1.0"
|
2015-09-22 12:48:43 -07:00
|
|
|
|
|
2014-08-27 09:31:55 -07:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr, "default") do
|
2014-08-27 09:31:55 -07:00
|
|
|
|
raise "kerblammo! #{195.chr}"
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal "kerblammo! <20>", job["error_message"]
|
2014-08-27 09:31:55 -07:00
|
|
|
|
end
|
|
|
|
|
|
2019-01-31 14:25:00 -05:00
|
|
|
|
# In the rare event that an error message raises an error itself,
|
|
|
|
|
# allow the job to retry. This will likely only happen for custom
|
|
|
|
|
# error classes that override #message
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "handles error message that raises an error" do
|
2019-01-31 14:25:00 -05:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr, "default") do
|
2019-01-31 14:25:00 -05:00
|
|
|
|
raise BadErrorMessage.new
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
assert_equal 1, Sidekiq::RetrySet.new.size
|
|
|
|
|
refute_nil job["error_message"]
|
|
|
|
|
end
|
2014-08-27 09:31:55 -07:00
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "allows a max_retries option in initializer" do
|
2013-08-01 14:54:30 -04:00
|
|
|
|
max_retries = 7
|
2019-10-08 07:48:39 +03:00
|
|
|
|
1.upto(max_retries + 1) do |i|
|
2013-08-01 14:54:30 -04:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
job = i > 1 ? jobstr("retry_count" => i - 2) : jobstr
|
2022-05-31 13:37:31 -07:00
|
|
|
|
@config[:max_retries] = max_retries
|
|
|
|
|
handler.local(worker, job, "default") do
|
2013-08-01 14:54:30 -04:00
|
|
|
|
raise "kerblammo!"
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
|
|
|
|
|
assert_equal max_retries, Sidekiq::RetrySet.new.size
|
|
|
|
|
assert_equal 1, Sidekiq::DeadSet.new.size
|
2013-08-01 14:54:30 -04:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "saves backtraces" do
|
2012-04-27 20:25:46 -07:00
|
|
|
|
c = nil
|
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr("backtrace" => true), "default") do
|
2012-04-27 20:25:46 -07:00
|
|
|
|
c = caller(0); raise "kerblammo!"
|
|
|
|
|
end
|
|
|
|
|
end
|
2019-09-15 22:55:42 +03:00
|
|
|
|
|
|
|
|
|
job = Sidekiq::RetrySet.new.first
|
|
|
|
|
assert job.error_backtrace
|
|
|
|
|
assert_equal c[0], job.error_backtrace[0]
|
2012-04-27 20:25:46 -07:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "saves partial backtraces" do
|
2012-04-27 20:25:46 -07:00
|
|
|
|
c = nil
|
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr("backtrace" => 3), "default") do
|
2015-01-09 21:07:01 -08:00
|
|
|
|
c = caller(0)[0...3]; raise "kerblammo!"
|
2012-04-27 20:25:46 -07:00
|
|
|
|
end
|
|
|
|
|
end
|
2019-09-15 22:55:42 +03:00
|
|
|
|
|
|
|
|
|
job = Sidekiq::RetrySet.new.first
|
|
|
|
|
assert job.error_backtrace
|
|
|
|
|
assert_equal c, job.error_backtrace
|
2015-01-09 21:07:01 -08:00
|
|
|
|
assert_equal 3, c.size
|
2012-04-27 20:25:46 -07:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "handles a new failed message" do
|
2012-03-17 18:22:56 -07:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr, "default") do
|
2012-03-17 18:22:56 -07:00
|
|
|
|
raise "kerblammo!"
|
|
|
|
|
end
|
|
|
|
|
end
|
2022-03-03 12:50:03 -08:00
|
|
|
|
assert_equal "default", job["queue"]
|
|
|
|
|
assert_equal "kerblammo!", job["error_message"]
|
|
|
|
|
assert_equal "RuntimeError", job["error_class"]
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 0, job["retry_count"]
|
|
|
|
|
refute job["error_backtrace"]
|
|
|
|
|
assert job["failed_at"]
|
2012-03-17 18:22:56 -07:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "shuts down without retrying work-in-progress, which will resume" do
|
2015-09-22 12:48:43 -07:00
|
|
|
|
rs = Sidekiq::RetrySet.new
|
|
|
|
|
assert_equal 0, rs.size
|
2022-03-03 12:50:03 -08:00
|
|
|
|
msg = {"class" => "Bob", "args" => [1, 2, "foo"], "retry" => true}
|
2014-06-30 16:58:19 +10:00
|
|
|
|
assert_raises Sidekiq::Shutdown do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, msg, "default") do
|
2014-06-30 16:58:19 +10:00
|
|
|
|
raise Sidekiq::Shutdown
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 0, rs.size
|
2014-06-30 16:58:19 +10:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "shuts down cleanly when shutdown causes exception" do
|
2015-09-22 12:48:43 -07:00
|
|
|
|
rs = Sidekiq::RetrySet.new
|
|
|
|
|
assert_equal 0, rs.size
|
2022-03-03 12:50:03 -08:00
|
|
|
|
msg = {"class" => "Bob", "args" => [1, 2, "foo"], "retry" => true}
|
2014-06-30 16:58:19 +10:00
|
|
|
|
assert_raises Sidekiq::Shutdown do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, msg, "default") do
|
|
|
|
|
raise Sidekiq::Shutdown
|
|
|
|
|
rescue Interrupt
|
|
|
|
|
raise "kerblammo!"
|
2014-06-30 16:58:19 +10:00
|
|
|
|
end
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 0, rs.size
|
2014-06-30 16:58:19 +10:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "shuts down cleanly when shutdown causes chained exceptions" do
|
2015-09-22 12:48:43 -07:00
|
|
|
|
rs = Sidekiq::RetrySet.new
|
|
|
|
|
assert_equal 0, rs.size
|
2014-06-30 16:58:19 +10:00
|
|
|
|
assert_raises Sidekiq::Shutdown do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr, "default") do
|
|
|
|
|
raise Sidekiq::Shutdown
|
|
|
|
|
rescue Interrupt
|
2014-06-30 16:58:19 +10:00
|
|
|
|
begin
|
2022-03-03 12:50:03 -08:00
|
|
|
|
raise "kerblammo!"
|
|
|
|
|
rescue
|
|
|
|
|
raise "kablooie!"
|
2014-06-30 16:58:19 +10:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 0, rs.size
|
2014-06-30 16:58:19 +10:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "allows a retry queue" do
|
2013-01-15 17:28:52 -08:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr("retry_queue" => "retryx"), "default") do
|
2013-01-15 17:28:52 -08:00
|
|
|
|
raise "kerblammo!"
|
|
|
|
|
end
|
|
|
|
|
end
|
2022-03-03 12:50:03 -08:00
|
|
|
|
assert_equal "retryx", job["queue"]
|
|
|
|
|
assert_equal "kerblammo!", job["error_message"]
|
|
|
|
|
assert_equal "RuntimeError", job["error_class"]
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 0, job["retry_count"]
|
|
|
|
|
refute job["error_backtrace"]
|
|
|
|
|
assert job["failed_at"]
|
2013-01-15 17:28:52 -08:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "handles a recurring failed message" do
|
2014-02-09 15:08:21 -08:00
|
|
|
|
now = Time.now.to_f
|
2022-03-03 12:50:03 -08:00
|
|
|
|
msg = {"queue" => "default", "error_message" => "kerblammo!", "error_class" => "RuntimeError", "failed_at" => now, "retry_count" => 10}
|
2012-03-17 18:22:56 -07:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr(msg), "default") do
|
2012-03-17 18:22:56 -07:00
|
|
|
|
raise "kerblammo!"
|
|
|
|
|
end
|
|
|
|
|
end
|
2022-05-31 13:37:31 -07:00
|
|
|
|
assert job, "No job found in retry set"
|
2022-03-03 12:50:03 -08:00
|
|
|
|
assert_equal "default", job["queue"]
|
|
|
|
|
assert_equal "kerblammo!", job["error_message"]
|
|
|
|
|
assert_equal "RuntimeError", job["error_class"]
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 11, job["retry_count"]
|
|
|
|
|
assert job["failed_at"]
|
2012-10-17 18:51:26 -04:00
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
it "throws away old messages after too many retries (using the default)" do
|
2015-09-22 12:48:43 -07:00
|
|
|
|
q = Sidekiq::Queue.new
|
|
|
|
|
rs = Sidekiq::RetrySet.new
|
|
|
|
|
ds = Sidekiq::DeadSet.new
|
|
|
|
|
assert_equal 0, q.size
|
|
|
|
|
assert_equal 0, rs.size
|
|
|
|
|
assert_equal 0, ds.size
|
2014-02-09 15:08:21 -08:00
|
|
|
|
now = Time.now.to_f
|
2022-03-03 12:50:03 -08:00
|
|
|
|
msg = {"queue" => "default", "error_message" => "kerblammo!", "error_class" => "RuntimeError", "failed_at" => now, "retry_count" => 25}
|
2012-10-17 18:51:26 -04:00
|
|
|
|
assert_raises RuntimeError do
|
2022-03-03 12:50:03 -08:00
|
|
|
|
handler.local(worker, jobstr(msg), "default") do
|
2012-10-17 18:51:26 -04:00
|
|
|
|
raise "kerblammo!"
|
|
|
|
|
end
|
|
|
|
|
end
|
2015-09-22 12:48:43 -07:00
|
|
|
|
assert_equal 0, q.size
|
|
|
|
|
assert_equal 0, rs.size
|
|
|
|
|
assert_equal 1, ds.size
|
2013-03-18 15:20:28 -06:00
|
|
|
|
end
|
2013-06-25 11:07:45 -04:00
|
|
|
|
|
|
|
|
|
describe "custom retry delay" do
|
2015-10-23 11:54:55 -04:00
|
|
|
|
class CustomWorkerWithoutException
|
2015-09-22 12:48:43 -07:00
|
|
|
|
include Sidekiq::Worker
|
2013-06-25 11:07:45 -04:00
|
|
|
|
|
2015-09-22 12:48:43 -07:00
|
|
|
|
sidekiq_retry_in do |count|
|
|
|
|
|
count * 2
|
2013-06-25 11:07:45 -04:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2018-03-21 13:01:58 +05:00
|
|
|
|
class SpecialError < StandardError
|
|
|
|
|
end
|
|
|
|
|
|
2015-10-23 11:54:55 -04:00
|
|
|
|
class CustomWorkerWithException
|
|
|
|
|
include Sidekiq::Worker
|
|
|
|
|
|
|
|
|
|
sidekiq_retry_in do |count, exception|
|
|
|
|
|
case exception
|
2018-03-21 13:01:58 +05:00
|
|
|
|
when SpecialError
|
2021-08-09 10:48:16 -07:00
|
|
|
|
nil
|
2015-10-23 11:54:55 -04:00
|
|
|
|
when ArgumentError
|
|
|
|
|
count * 4
|
|
|
|
|
else
|
|
|
|
|
count * 2
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2015-09-22 12:48:43 -07:00
|
|
|
|
class ErrorWorker
|
|
|
|
|
include Sidekiq::Worker
|
2013-06-25 12:35:11 -04:00
|
|
|
|
|
2015-09-22 12:48:43 -07:00
|
|
|
|
sidekiq_retry_in do |count|
|
|
|
|
|
count / 0
|
2013-06-25 12:35:11 -04:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2013-06-25 11:07:45 -04:00
|
|
|
|
it "retries with a default delay" do
|
2015-10-23 11:54:55 -04:00
|
|
|
|
refute_equal 4, handler.__send__(:delay_for, worker, 2, StandardError.new)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it "retries with a custom delay and exception 1" do
|
2021-08-09 10:48:16 -07:00
|
|
|
|
assert_includes 4..35, handler.__send__(:delay_for, CustomWorkerWithException, 2, ArgumentError.new)
|
2015-10-23 11:54:55 -04:00
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it "retries with a custom delay and exception 2" do
|
2021-08-09 10:48:16 -07:00
|
|
|
|
assert_includes 4..35, handler.__send__(:delay_for, CustomWorkerWithException, 2, StandardError.new)
|
2013-06-25 11:07:45 -04:00
|
|
|
|
end
|
|
|
|
|
|
2018-03-21 13:01:58 +05:00
|
|
|
|
it "retries with a default delay and exception in case of configured with nil" do
|
|
|
|
|
refute_equal 8, handler.__send__(:delay_for, CustomWorkerWithException, 2, SpecialError.new)
|
|
|
|
|
refute_equal 4, handler.__send__(:delay_for, CustomWorkerWithException, 2, SpecialError.new)
|
|
|
|
|
end
|
|
|
|
|
|
2015-10-23 11:54:55 -04:00
|
|
|
|
it "retries with a custom delay without exception" do
|
2021-08-09 10:48:16 -07:00
|
|
|
|
assert_includes 4..35, handler.__send__(:delay_for, CustomWorkerWithoutException, 2, StandardError.new)
|
2013-06-25 11:07:45 -04:00
|
|
|
|
end
|
2013-06-25 12:35:11 -04:00
|
|
|
|
|
|
|
|
|
it "falls back to the default retry on exception" do
|
2022-05-31 13:37:31 -07:00
|
|
|
|
output = capture_logging do
|
|
|
|
|
refute_equal 4, handler.__send__(:delay_for, ErrorWorker, 2, StandardError.new)
|
|
|
|
|
end
|
2013-06-25 12:35:11 -04:00
|
|
|
|
assert_match(/Failure scheduling retry using the defined `sidekiq_retry_in`/,
|
2022-05-31 13:37:31 -07:00
|
|
|
|
output, "Log entry missing for sidekiq_retry_in")
|
2013-06-25 12:35:11 -04:00
|
|
|
|
end
|
2013-06-25 11:07:45 -04:00
|
|
|
|
end
|
2015-04-08 13:08:29 +02:00
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
describe "handles errors withouth cause" do
|
2015-04-08 19:34:49 +02:00
|
|
|
|
before do
|
|
|
|
|
@error = nil
|
|
|
|
|
begin
|
2022-03-03 12:50:03 -08:00
|
|
|
|
raise ::StandardError, "Error"
|
|
|
|
|
rescue => e
|
2015-04-08 19:34:49 +02:00
|
|
|
|
@error = e
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
it "does not recurse infinitely checking if it's a shutdown" do
|
2022-05-31 13:37:31 -07:00
|
|
|
|
assert(!Sidekiq::JobRetry.new(@config).send(
|
2022-03-03 12:50:03 -08:00
|
|
|
|
:exception_caused_by_shutdown?, @error
|
|
|
|
|
))
|
2015-04-08 19:34:49 +02:00
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2022-03-03 12:50:03 -08:00
|
|
|
|
describe "handles errors with circular causes" do
|
2015-04-08 13:08:29 +02:00
|
|
|
|
before do
|
|
|
|
|
@error = nil
|
|
|
|
|
begin
|
|
|
|
|
begin
|
2022-03-03 12:50:03 -08:00
|
|
|
|
raise ::StandardError, "Error 1"
|
|
|
|
|
rescue => e1
|
2015-04-08 13:08:29 +02:00
|
|
|
|
begin
|
2022-03-03 12:50:03 -08:00
|
|
|
|
raise ::StandardError, "Error 2"
|
|
|
|
|
rescue
|
2015-04-08 13:08:29 +02:00
|
|
|
|
raise e1
|
|
|
|
|
end
|
|
|
|
|
end
|
2022-03-03 12:50:03 -08:00
|
|
|
|
rescue => e
|
2015-04-08 13:08:29 +02:00
|
|
|
|
@error = e
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
2015-04-08 19:34:49 +02:00
|
|
|
|
it "does not recurse infinitely checking if it's a shutdown" do
|
2022-05-31 13:37:31 -07:00
|
|
|
|
assert(!Sidekiq::JobRetry.new(@config).send(
|
2022-03-03 12:50:03 -08:00
|
|
|
|
:exception_caused_by_shutdown?, @error
|
|
|
|
|
))
|
2015-04-08 13:08:29 +02:00
|
|
|
|
end
|
|
|
|
|
end
|
2012-03-17 18:22:56 -07:00
|
|
|
|
end
|
|
|
|
|
end
|