response.body_with_limit if http_client.persistent?
yield response if block_given?
- rescue => e
- raise e.class, e.message, e.backtrace[0]
ensure
http_client.close unless http_client.persistent?
end
# frozen_string_literal: true
class SidekiqErrorHandler
+ BACKTRACE_LIMIT = 3
+
def call(*)
yield
rescue Mastodon::HostValidationError
# Do not retry
+ rescue => e
+ limit_backtrace_and_raise(e)
ensure
socket = Thread.current[:statsd_socket]
socket&.close
Thread.current[:statsd_socket] = nil
end
+
+ private
+
+ def limit_backtrace_and_raise(e)
+ e.set_backtrace(e.backtrace.first(BACKTRACE_LIMIT))
+ raise e
+ end
end
end
end
- begin
- light.with_threshold(STOPLIGHT_FAILURE_THRESHOLD)
- .with_cool_off_time(STOPLIGHT_COOLDOWN)
- .run
- rescue Stoplight::Error::RedLight => e
- raise e.class, e.message, e.backtrace.first(3)
- end
+ light.with_threshold(STOPLIGHT_FAILURE_THRESHOLD)
+ .with_cool_off_time(STOPLIGHT_COOLDOWN)
+ .run
end
def failure_tracker