diff options
author | Yorick Peterse <yorickpeterse@gmail.com> | 2017-02-14 15:05:07 +0300 |
---|---|---|
committer | Yorick Peterse <yorickpeterse@gmail.com> | 2017-02-14 15:05:07 +0300 |
commit | f802ad370e625e7aa2f3023f73c24a8b6f009821 (patch) | |
tree | 4c19328a336cfbdc8e522d7983f35b334c6aa7fd /lib/gitlab/database.rb | |
parent | 1cac06c4e811ddbfeed8f699cb29ba37394916fb (diff) | |
parent | 03f1abfcc3e43fce188f94a770f5f7b6af6f36b5 (diff) |
Merge branch 'create-connection-pool' into 'master'
Introduce Gitlab::Database.with_connection_pool
See merge request !9192
Diffstat (limited to 'lib/gitlab/database.rb')
-rw-r--r-- | lib/gitlab/database.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/gitlab/database.rb b/lib/gitlab/database.rb index a3d6be9959b..a47d7e98a62 100644 --- a/lib/gitlab/database.rb +++ b/lib/gitlab/database.rb @@ -69,6 +69,31 @@ module Gitlab end end + def self.with_connection_pool(pool_size) + pool = create_connection_pool(pool_size) + + begin + yield(pool) + ensure + pool.disconnect! + end + end + + def self.create_connection_pool(pool_size) + # See activerecord-4.2.7.1/lib/active_record/connection_adapters/connection_specification.rb + env = Rails.env + original_config = ActiveRecord::Base.configurations + env_config = original_config[env].merge('pool' => pool_size) + config = original_config.merge(env => env_config) + + spec = + ActiveRecord:: + ConnectionAdapters:: + ConnectionSpecification::Resolver.new(config).spec(env.to_sym) + + ActiveRecord::ConnectionAdapters::ConnectionPool.new(spec) + end + def self.connection ActiveRecord::Base.connection end |