Fix error within error when limiting backtrace to 3 lines (#13120)
Fix #13086, close #13113
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user