1
0
مراية لـ https://github.com/postalserver/postal.git تم المزامنة 2025-11-30 21:32:30 +00:00

feat(worker): scale connection pool with worker threads

This will automatically increase the DB connection pool size if the number of threads needed in a worker is less than the maximum pool size configured.
هذا الالتزام موجود في:
Adam Cooke
2024-03-18 08:12:27 +00:00
الأصل 7e2acccd1e
التزام ea542a0694
3 ملفات معدلة مع 41 إضافات و0 حذوفات

عرض الملف

@@ -60,6 +60,7 @@ module Worker
def run
logger.tagged(component: "worker") do
setup_traps
ensure_connection_pool_size_is_suitable
start_work_threads
start_tasks_thread
wait_for_threads
@@ -96,6 +97,23 @@ module Worker
@exit_pipe_read.wait_readable(wait_time) ? true : false
end
# Ensure that the connection pool is big enough for the number of threads
# configured.
#
# @return [void]
def ensure_connection_pool_size_is_suitable
current_pool_size = ActiveRecord::Base.connection_pool.size
desired_pool_size = @thread_count + 3
return if current_pool_size >= desired_pool_size
logger.warn "number of worker threads (#{@thread_count}) is more " \
"than the db connection pool size (#{current_pool_size}+3), " \
"increasing connection pool size to #{desired_pool_size}"
Postal.change_database_connection_pool_size(desired_pool_size)
end
# Wait for all threads to complete
#
# @return [void]

عرض الملف

@@ -22,6 +22,8 @@ module Postal
class << self
attr_writer :current_process_type
# Return the path to the config file
#
# @return [String]
@@ -136,6 +138,21 @@ module Postal
end
end
# Change the connection pool size to the given size.
#
# @param new_size [Integer]
# @return [void]
def change_database_connection_pool_size(new_size)
ActiveRecord::Base.connection_pool.disconnect!
config = ActiveRecord::Base.configurations
.configs_for(env_name: Rails.env)
.first
.configuration_hash
ActiveRecord::Base.establish_connection(config.merge(pool: new_size))
end
end
Config = initialize_config

عرض الملف

@@ -9,4 +9,10 @@ RSpec.describe Postal do
expect(Postal.signer.private_key.to_pem).to eq OpenSSL::PKey::RSA.new(File.read(Postal::Config.postal.signing_key_path)).to_pem
end
end
describe "#change_database_connection_pool_size" do
it "changes the connection pool size" do
expect { Postal.change_database_connection_pool_size(8) }.to change { ActiveRecord::Base.connection_pool.size }.from(5).to(8)
end
end
end