FIX: stop using Rails connection reaper in multisite

The Rails 5.2 connection reaper appears to be leaking threads
this is a quick fix to stop it, though we need to make sure we
never leak connection pools as well.
This commit is contained in:
Sam 2018-06-14 12:49:30 +10:00
parent c56bd2ac16
commit 66982c7800
2 changed files with 22 additions and 0 deletions

View File

@ -270,5 +270,9 @@ module Discourse
g.test_framework :rspec, fixture: false
end
# we have a monkey_patch we need to require early... prior to connection
# init
require 'freedom_patches/reaper'
end
end

View File

@ -0,0 +1,18 @@
# Discourse ships with a connection reaper
# this patch ensures that the connection reaper never runs in Rails
#
# In Rails 5.2 the connection reaper is "per-pool" this means it can bloat
# threads quite a lot in a multisite
#
# Note, the "correct" way is to set this in the spec, however due to multisite
# getting reaper_interval=0 into all the specs is not going to be trivial
# when we eventually do that we can remove this patch
if !defined? ActiveRecord::ConnectionAdapters::ConnectionPool::Reaper
raise "Can not find connection Reaper class, this patch will no longer work!"
end
class ActiveRecord::ConnectionAdapters::ConnectionPool::Reaper
def run
end
end