mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
AbstractAdapter#close can be called to add the connection back to the
pool.
This commit is contained in:
@@ -275,6 +275,7 @@ module ActiveRecord
|
||||
raise ConnectionNotEstablished unless @automatic_reconnect
|
||||
|
||||
c = new_connection
|
||||
c.pool = self
|
||||
@connections << c
|
||||
c
|
||||
end
|
||||
|
||||
@@ -53,23 +53,25 @@ module ActiveRecord
|
||||
|
||||
define_callbacks :checkout, :checkin
|
||||
|
||||
attr_accessor :visitor
|
||||
attr_accessor :visitor, :pool
|
||||
attr_reader :schema_cache, :last_use, :in_use
|
||||
alias :in_use? :in_use
|
||||
|
||||
def initialize(connection, logger = nil) #:nodoc:
|
||||
def initialize(connection, logger = nil, pool = nil) #:nodoc:
|
||||
super()
|
||||
|
||||
@active = nil
|
||||
@connection, @logger = connection, logger
|
||||
@active = nil
|
||||
@connection = connection
|
||||
@in_use = false
|
||||
@instrumenter = ActiveSupport::Notifications.instrumenter
|
||||
@last_use = false
|
||||
@logger = logger
|
||||
@open_transactions = 0
|
||||
@pool = pool
|
||||
@query_cache = Hash.new { |h,sql| h[sql] = {} }
|
||||
@query_cache_enabled = false
|
||||
@query_cache = Hash.new { |h,sql| h[sql] = {} }
|
||||
@open_transactions = 0
|
||||
@instrumenter = ActiveSupport::Notifications.instrumenter
|
||||
@visitor = nil
|
||||
@schema_cache = SchemaCache.new self
|
||||
@in_use = false
|
||||
@last_use = false
|
||||
@schema_cache = SchemaCache.new self
|
||||
@visitor = nil
|
||||
end
|
||||
|
||||
def lease
|
||||
@@ -256,6 +258,11 @@ module ActiveRecord
|
||||
"active_record_#{open_transactions}"
|
||||
end
|
||||
|
||||
# Check the connection back in to the connection pool
|
||||
def close
|
||||
pool.checkin self
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def log(sql, name = "SQL", binds = [])
|
||||
|
||||
@@ -33,6 +33,22 @@ module ActiveRecord
|
||||
adapter.expire
|
||||
assert !adapter.in_use?, 'adapter is in use'
|
||||
end
|
||||
|
||||
def test_close
|
||||
pool = ConnectionPool.new(Base::ConnectionSpecification.new({}, nil))
|
||||
pool.connections << adapter
|
||||
adapter.pool = pool
|
||||
|
||||
# Make sure the pool marks the connection in use
|
||||
assert_equal adapter, pool.connection
|
||||
assert adapter.in_use?
|
||||
|
||||
# Close should put the adapter back in the pool
|
||||
adapter.close
|
||||
assert !adapter.in_use?
|
||||
|
||||
assert_equal adapter, pool.connection
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user