diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2022-04-29 22:43:07 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-29 22:43:07 +0200 |
commit | 7b0fe4aef97c6a5f73a03146b669a415f396799c (patch) | |
tree | 328a1117bf021f1ffc0e126e9563f71b31862f1e /lib | |
parent | 6476f7e4da4da7c353d497aae5a86fc3909ce532 (diff) |
Fix opening and closing Redis connections instead of using a pool (#18171)
* Fix opening and closing Redis connections instead of using a pool * Fix Redis connections not being returned to the pool in CLI commands
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mastodon/cli_helper.rb | 12 | ||||
-rw-r--r-- | lib/mastodon/rack_middleware.rb | 2 | ||||
-rw-r--r-- | lib/mastodon/search_cli.rb | 7 | ||||
-rw-r--r-- | lib/mastodon/sidekiq_middleware.rb | 2 |
4 files changed, 15 insertions, 8 deletions
diff --git a/lib/mastodon/cli_helper.rb b/lib/mastodon/cli_helper.rb index aaee1fa91..a78a28e27 100644 --- a/lib/mastodon/cli_helper.rb +++ b/lib/mastodon/cli_helper.rb @@ -19,15 +19,18 @@ module Mastodon ProgressBar.create(total: total, format: '%c/%u |%b%i| %e') end + def reset_connection_pools! + ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations[Rails.env].dup.tap { |config| config['pool'] = options[:concurrency] + 1 }) + RedisConfiguration.establish_pool(options[:concurrency]) + end + def parallelize_with_progress(scope) if options[:concurrency] < 1 say('Cannot run with this concurrency setting, must be at least 1', :red) exit(1) end - db_config = ActiveRecord::Base.configurations[Rails.env].dup - db_config['pool'] = options[:concurrency] + 1 - ActiveRecord::Base.establish_connection(db_config) + reset_connection_pools! progress = create_progress_bar(scope.count) pool = Concurrent::FixedThreadPool.new(options[:concurrency]) @@ -52,6 +55,9 @@ module Mastodon result = ActiveRecord::Base.connection_pool.with_connection do yield(item) + ensure + RedisConfiguration.pool.checkin if Thread.current[:redis] + Thread.current[:redis] = nil end aggregate.increment(result) if result.is_a?(Integer) diff --git a/lib/mastodon/rack_middleware.rb b/lib/mastodon/rack_middleware.rb index 619a2c36d..8aa7911fe 100644 --- a/lib/mastodon/rack_middleware.rb +++ b/lib/mastodon/rack_middleware.rb @@ -19,7 +19,7 @@ class Mastodon::RackMiddleware end def clean_up_redis_socket! - Thread.current[:redis]&.close + RedisConfiguration.pool.checkin if Thread.current[:redis] Thread.current[:redis] = nil end diff --git a/lib/mastodon/search_cli.rb b/lib/mastodon/search_cli.rb index 6ad9d7b6a..74f980ba1 100644 --- a/lib/mastodon/search_cli.rb +++ b/lib/mastodon/search_cli.rb @@ -59,9 +59,7 @@ module Mastodon index.specification.lock! end - db_config = ActiveRecord::Base.configurations[Rails.env].dup - db_config['pool'] = options[:concurrency] + 1 - ActiveRecord::Base.establish_connection(db_config) + reset_connection_pools! pool = Concurrent::FixedThreadPool.new(options[:concurrency]) added = Concurrent::AtomicFixnum.new(0) @@ -139,6 +137,9 @@ module Mastodon sleep 1 rescue => e progress.log pastel.red("Error importing #{index}: #{e}") + ensure + RedisConfiguration.pool.checkin if Thread.current[:redis] + Thread.current[:redis] = nil end end end diff --git a/lib/mastodon/sidekiq_middleware.rb b/lib/mastodon/sidekiq_middleware.rb index 7ec4097df..c75e8401f 100644 --- a/lib/mastodon/sidekiq_middleware.rb +++ b/lib/mastodon/sidekiq_middleware.rb @@ -26,7 +26,7 @@ class Mastodon::SidekiqMiddleware end def clean_up_redis_socket! - Thread.current[:redis]&.close + RedisConfiguration.pool.checkin if Thread.current[:redis] Thread.current[:redis] = nil end |