diff --git a/app/lib/request.rb b/app/lib/request.rb index c476e7785bdab30f5d93efb6ae5399f2527fd987..247c32958ac591d153b8aa2603194d3a67802b01 100644 --- a/app/lib/request.rb +++ b/app/lib/request.rb @@ -73,8 +73,6 @@ class Request 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 diff --git a/app/lib/sidekiq_error_handler.rb b/app/lib/sidekiq_error_handler.rb index 8eb6b942dba17302880dcb87fd490652e14bc813..b07817d4556b2d37059471aa97b9b4b27069f7a2 100644 --- a/app/lib/sidekiq_error_handler.rb +++ b/app/lib/sidekiq_error_handler.rb @@ -1,13 +1,24 @@ # 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 diff --git a/app/workers/activitypub/delivery_worker.rb b/app/workers/activitypub/delivery_worker.rb index 14e37dc34aa32d4566ac935a19e85fbf8e1a3669..60775787a8a01138a92d6f36e316a79f2bda0279 100644 --- a/app/workers/activitypub/delivery_worker.rb +++ b/app/workers/activitypub/delivery_worker.rb @@ -52,13 +52,9 @@ class ActivityPub::DeliveryWorker 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