mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: Debug AR connection pool queue on CI (#25687)
Why this change? On CI, we have been seeing flaky system tests because ActiveRecord is unable to checkout a connection. This patch is meant to help us debug which thread is not returning the connection to the queue.
This commit is contained in:
committed by
GitHub
parent
c1577019c8
commit
796af077c5
40
lib/freedom_patches/debug_connection_queue.rb
Normal file
40
lib/freedom_patches/debug_connection_queue.rb
Normal file
@@ -0,0 +1,40 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
if ENV["DEBUG_AR_CONNECTION_QUEUE"] == "1"
|
||||
module QueuePatch
|
||||
# Add +element+ to the queue. Never blocks.
|
||||
def add(element)
|
||||
puts "::group::##{Process.pid} Adding element to the queue"
|
||||
puts Thread.current.backtrace.first(30).join("\n")
|
||||
puts "::endgroup::"
|
||||
super
|
||||
end
|
||||
|
||||
# If +element+ is in the queue, remove and return it, or +nil+.
|
||||
def delete(element)
|
||||
puts "::group::##{Process.pid} Delete element from the queue"
|
||||
puts Thread.current.backtrace.first(30).join("\n")
|
||||
puts "::endgroup::"
|
||||
super
|
||||
end
|
||||
|
||||
# Remove all elements from the queue.
|
||||
def clear
|
||||
puts "::group::##{Process.pid} Clear all elements from the queue"
|
||||
puts Thread.current.backtrace.first(30).join("\n")
|
||||
puts "::endgroup::"
|
||||
super
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def remove
|
||||
puts "::group::##{Process.pid} Removing element from the queue"
|
||||
puts Thread.current.backtrace.first(30).join("\n")
|
||||
puts "::endgroup::"
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
ActiveRecord::ConnectionAdapters::ConnectionPool::Queue.prepend(QueuePatch)
|
||||
end
|
||||
Reference in New Issue
Block a user