about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorStarfall <us@starfall.systems>2022-04-29 09:20:51 -0500
committerStarfall <us@starfall.systems>2022-04-29 09:20:51 -0500
commit4eb291e5db6114c8aa564f0c9e7f04d13805b5cc (patch)
tree1a6affcf635974ccf6d0f650a3bbe2be75c7929e /lib
parentbcaacc42334d75bd361f330989041a9beba101a9 (diff)
parent252deefe3433d0cedafd973becd0d85b5182eb49 (diff)
Merge remote-tracking branch 'glitch/main'
Diffstat (limited to 'lib')
-rw-r--r--lib/mastodon/feeds_cli.rb7
-rw-r--r--lib/mastodon/rack_middleware.rb30
-rw-r--r--lib/mastodon/redis_config.rb22
-rw-r--r--lib/mastodon/sidekiq_middleware.rb (renamed from lib/sidekiq_error_handler.rb)21
-rw-r--r--lib/tasks/tests.rake5
5 files changed, 71 insertions, 14 deletions
diff --git a/lib/mastodon/feeds_cli.rb b/lib/mastodon/feeds_cli.rb
index 578ea15c5..428d63a44 100644
--- a/lib/mastodon/feeds_cli.rb
+++ b/lib/mastodon/feeds_cli.rb
@@ -7,6 +7,7 @@ require_relative 'cli_helper'
 module Mastodon
   class FeedsCLI < Thor
     include CLIHelper
+    include Redisable
 
     def self.exit_on_failure?
       true
@@ -51,10 +52,10 @@ module Mastodon
 
     desc 'clear', 'Remove all home and list feeds from Redis'
     def clear
-      keys = Redis.current.keys('feed:*')
+      keys = redis.keys('feed:*')
 
-      Redis.current.pipelined do
-        keys.each { |key| Redis.current.del(key) }
+      redis.pipelined do
+        keys.each { |key| redis.del(key) }
       end
 
       say('OK', :green)
diff --git a/lib/mastodon/rack_middleware.rb b/lib/mastodon/rack_middleware.rb
new file mode 100644
index 000000000..619a2c36d
--- /dev/null
+++ b/lib/mastodon/rack_middleware.rb
@@ -0,0 +1,30 @@
+# frozen_string_literal: true
+
+class Mastodon::RackMiddleware
+  def initialize(app)
+    @app = app
+  end
+
+  def call(env)
+    @app.call(env)
+  ensure
+    clean_up_sockets!
+  end
+
+  private
+
+  def clean_up_sockets!
+    clean_up_redis_socket!
+    clean_up_statsd_socket!
+  end
+
+  def clean_up_redis_socket!
+    Thread.current[:redis]&.close
+    Thread.current[:redis] = nil
+  end
+
+  def clean_up_statsd_socket!
+    Thread.current[:statsd_socket]&.close
+    Thread.current[:statsd_socket] = nil
+  end
+end
diff --git a/lib/mastodon/redis_config.rb b/lib/mastodon/redis_config.rb
index 5bfd26e34..98dc4788d 100644
--- a/lib/mastodon/redis_config.rb
+++ b/lib/mastodon/redis_config.rb
@@ -11,13 +11,15 @@ def setup_redis_env_url(prefix = nil, defaults = true)
   port     = ENV.fetch(prefix + 'REDIS_PORT') { 6379 if defaults }
   db       = ENV.fetch(prefix + 'REDIS_DB') { 0 if defaults }
 
-  ENV[prefix + 'REDIS_URL'] = if [password, host, port, db].all?(&:nil?)
-                                ENV['REDIS_URL']
-                              else
-                                Addressable::URI.parse("redis://#{host}:#{port}/#{db}").tap do |uri|
-                                  uri.password = password if password.present?
-                                end.normalize.to_str
-                              end
+  ENV[prefix + 'REDIS_URL'] = begin
+    if [password, host, port, db].all?(&:nil?)
+      ENV['REDIS_URL']
+    else
+      Addressable::URI.parse("redis://#{host}:#{port}/#{db}").tap do |uri|
+        uri.password = password if password.present?
+      end.normalize.to_str
+    end
+  end
 end
 
 setup_redis_env_url
@@ -33,6 +35,8 @@ REDIS_CACHE_PARAMS = {
   url: ENV['CACHE_REDIS_URL'],
   expires_in: 10.minutes,
   namespace: cache_namespace,
+  pool_size: Sidekiq.server? ? Sidekiq.options[:concurrency] : Integer(ENV['MAX_THREADS'] || 5),
+  pool_timeout: 5,
 }.freeze
 
 REDIS_SIDEKIQ_PARAMS = {
@@ -40,3 +44,7 @@ REDIS_SIDEKIQ_PARAMS = {
   url: ENV['SIDEKIQ_REDIS_URL'],
   namespace: sidekiq_namespace,
 }.freeze
+
+if Rails.env.test?
+  ENV['REDIS_NAMESPACE'] = "mastodon_test#{ENV['TEST_ENV_NUMBER']}"
+end
diff --git a/lib/sidekiq_error_handler.rb b/lib/mastodon/sidekiq_middleware.rb
index 358afd540..7ec4097df 100644
--- a/lib/sidekiq_error_handler.rb
+++ b/lib/mastodon/sidekiq_middleware.rb
@@ -1,6 +1,6 @@
 # frozen_string_literal: true
 
-class SidekiqErrorHandler
+class Mastodon::SidekiqMiddleware
   BACKTRACE_LIMIT = 3
 
   def call(*)
@@ -10,9 +10,7 @@ class SidekiqErrorHandler
   rescue => e
     limit_backtrace_and_raise(e)
   ensure
-    socket = Thread.current[:statsd_socket]
-    socket&.close
-    Thread.current[:statsd_socket] = nil
+    clean_up_sockets!
   end
 
   private
@@ -21,4 +19,19 @@ class SidekiqErrorHandler
     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!
+    Thread.current[:redis]&.close
+    Thread.current[:redis] = nil
+  end
+
+  def clean_up_statsd_socket!
+    Thread.current[:statsd_socket]&.close
+    Thread.current[:statsd_socket] = nil
+  end
 end
diff --git a/lib/tasks/tests.rake b/lib/tasks/tests.rake
index 8082f32fb..0f3b44a74 100644
--- a/lib/tasks/tests.rake
+++ b/lib/tasks/tests.rake
@@ -33,6 +33,11 @@ namespace :tests do
         puts 'AccountConversation records not created as expected'
         exit(1)
       end
+
+      if Account.find(-99).private_key.blank?
+        puts 'Instance actor does not have a private key'
+        exit(1)
+      end
     end
 
     desc 'Populate the database with test data for 2.4.0'