Skip to content
Browse files

AbstractAdapter#close can be called to add the connection back to the

pool.
  • Loading branch information...
1 parent ce3d8d6 commit 29d2040b2992c112ca475a7a56bcd7f2016252ce @tenderlove tenderlove committed
View
1 activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
@@ -275,6 +275,7 @@ def checkout_new_connection
raise ConnectionNotEstablished unless @automatic_reconnect
c = new_connection
+ c.pool = self
@connections << c
c
end
View
29 activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
@@ -53,23 +53,25 @@ class AbstractAdapter
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 @@ def current_savepoint_name
"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 = [])
View
16 activerecord/test/cases/connection_adapters/abstract_adapter_test.rb
@@ -33,6 +33,22 @@ def test_expire_mutates_in_use
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

0 comments on commit 29d2040

Please sign in to comment.
Something went wrong with that request. Please try again.