* Fix opening and closing Redis connections instead of using a pool * Fix Redis connections not being returned to the pool in CLI commands
		
			
				
	
	
		
			38 lines
		
	
	
		
			748 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			748 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class Mastodon::SidekiqMiddleware
 | 
						|
  BACKTRACE_LIMIT = 3
 | 
						|
 | 
						|
  def call(*)
 | 
						|
    yield
 | 
						|
  rescue Mastodon::HostValidationError
 | 
						|
    # Do not retry
 | 
						|
  rescue => e
 | 
						|
    limit_backtrace_and_raise(e)
 | 
						|
  ensure
 | 
						|
    clean_up_sockets!
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def limit_backtrace_and_raise(exception)
 | 
						|
    exception.set_backtrace(exception.backtrace.first(BACKTRACE_LIMIT))
 | 
						|
    raise exception
 | 
						|
  end
 | 
						|
 | 
						|
  def clean_up_sockets!
 | 
						|
    clean_up_redis_socket!
 | 
						|
    clean_up_statsd_socket!
 | 
						|
  end
 | 
						|
 | 
						|
  def clean_up_redis_socket!
 | 
						|
    RedisConfiguration.pool.checkin if Thread.current[:redis]
 | 
						|
    Thread.current[:redis] = nil
 | 
						|
  end
 | 
						|
 | 
						|
  def clean_up_statsd_socket!
 | 
						|
    Thread.current[:statsd_socket]&.close
 | 
						|
    Thread.current[:statsd_socket] = nil
 | 
						|
  end
 | 
						|
end
 |