提交 41c24eb3 编写于 作者: A Aaron Patterson

each connection pool has a reaper

上级 cde7692d
......@@ -64,6 +64,9 @@ module ConnectionAdapters
# * +wait_timeout+: number of seconds to block and wait for a connection
# before giving up and raising a timeout error (default 5 seconds).
class ConnectionPool
# Every +frequency+ seconds, the reaper will call +reap+ on +pool+.
# A reaper instantiated with a nil frequency will never reap the
# connection pool.
class Reaper
attr_reader :pool, :frequency
......@@ -86,7 +89,7 @@ def start
include MonitorMixin
attr_accessor :automatic_reconnect, :timeout
attr_reader :spec, :connections, :size
attr_reader :spec, :connections, :size, :reaper
# Creates a new ConnectionPool object. +spec+ is a ConnectionSpecification
# object which describes database connection information (e.g. adapter,
......@@ -103,6 +106,7 @@ def initialize(spec)
@reserved_connections = {}
@timeout = spec.config[:wait_timeout] || 5
@reaper = Reaper.new self, spec.config[:reaping_frequency]
# default max pool size to 5
@size = (spec.config[:pool] && spec.config[:pool].to_i) || 5
......
......@@ -3,7 +3,7 @@ module ConnectionAdapters
class ConnectionSpecification #:nodoc:
attr_reader :config, :adapter_method
def initialize (config, adapter_method)
def initialize(config, adapter_method)
@config, @adapter_method = config, adapter_method
end
......
......@@ -41,6 +41,18 @@ def test_some_time
sleep 0.0002
assert_equal(count - 1, pool.connections.length)
end
def test_pool_has_reaper
assert pool.reaper
end
def test_reaping_frequency_configuration
spec = ActiveRecord::Base.connection_pool.spec
spec = ConnectionSpecification.new(spec.config.dup, spec.adapter_method)
spec.config[:reaping_frequency] = 100
pool = ConnectionPool.new spec
assert_equal 100, pool.reaper.frequency
end
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册