Fix error within error when limiting backtrace to 3 lines (#13120)
Fix #13086, close #13113
This commit is contained in:
		
							parent
							
								
									e09e225e5c
								
							
						
					
					
						commit
						e9ecbca70d
					
				
					 3 changed files with 14 additions and 9 deletions
				
			
		| 
						 | 
					@ -73,8 +73,6 @@ class Request
 | 
				
			||||||
      response.body_with_limit if http_client.persistent?
 | 
					      response.body_with_limit if http_client.persistent?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      yield response if block_given?
 | 
					      yield response if block_given?
 | 
				
			||||||
    rescue => e
 | 
					 | 
				
			||||||
      raise e.class, e.message, e.backtrace[0]
 | 
					 | 
				
			||||||
    ensure
 | 
					    ensure
 | 
				
			||||||
      http_client.close unless http_client.persistent?
 | 
					      http_client.close unless http_client.persistent?
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,24 @@
 | 
				
			||||||
# frozen_string_literal: true
 | 
					# frozen_string_literal: true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class SidekiqErrorHandler
 | 
					class SidekiqErrorHandler
 | 
				
			||||||
 | 
					  BACKTRACE_LIMIT = 3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def call(*)
 | 
					  def call(*)
 | 
				
			||||||
    yield
 | 
					    yield
 | 
				
			||||||
  rescue Mastodon::HostValidationError
 | 
					  rescue Mastodon::HostValidationError
 | 
				
			||||||
    # Do not retry
 | 
					    # Do not retry
 | 
				
			||||||
 | 
					  rescue => e
 | 
				
			||||||
 | 
					    limit_backtrace_and_raise(e)
 | 
				
			||||||
  ensure
 | 
					  ensure
 | 
				
			||||||
    socket = Thread.current[:statsd_socket]
 | 
					    socket = Thread.current[:statsd_socket]
 | 
				
			||||||
    socket&.close
 | 
					    socket&.close
 | 
				
			||||||
    Thread.current[:statsd_socket] = nil
 | 
					    Thread.current[:statsd_socket] = nil
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def limit_backtrace_and_raise(e)
 | 
				
			||||||
 | 
					    e.set_backtrace(e.backtrace.first(BACKTRACE_LIMIT))
 | 
				
			||||||
 | 
					    raise e
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -52,13 +52,9 @@ class ActivityPub::DeliveryWorker
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    begin
 | 
					    light.with_threshold(STOPLIGHT_FAILURE_THRESHOLD)
 | 
				
			||||||
      light.with_threshold(STOPLIGHT_FAILURE_THRESHOLD)
 | 
					         .with_cool_off_time(STOPLIGHT_COOLDOWN)
 | 
				
			||||||
           .with_cool_off_time(STOPLIGHT_COOLDOWN)
 | 
					         .run
 | 
				
			||||||
           .run
 | 
					 | 
				
			||||||
    rescue Stoplight::Error::RedLight => e
 | 
					 | 
				
			||||||
      raise e.class, e.message, e.backtrace.first(3)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def failure_tracker
 | 
					  def failure_tracker
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue