aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Sieger <nick@nicksieger.com>2008-08-22 13:45:10 -0500
committerNick Sieger <nick@nicksieger.com>2008-08-29 14:12:12 -0500
commit212134dce158db0ecb4169c28fd9ef80ea1a55b2 (patch)
treef9028fe87def283d1fd46dd457015eae465842d5
parentca6d71753f3a2e8a0a29108b7c55ba3b7c8cd943 (diff)
downloadrails-212134dce158db0ecb4169c28fd9ef80ea1a55b2.tar.gz
rails-212134dce158db0ecb4169c28fd9ef80ea1a55b2.tar.bz2
rails-212134dce158db0ecb4169c28fd9ef80ea1a55b2.zip
Remove CachedConnectionPerThread per-thread pooling mechanism in favor of a fixed pool with default maximum of 5 connections
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb21
-rw-r--r--activerecord/lib/active_record/connection_adapters/mysql_adapter.rb5
-rw-r--r--activerecord/lib/active_record/fixtures.rb2
-rw-r--r--activerecord/test/cases/locking_test.rb2
-rw-r--r--activerecord/test/cases/threaded_connections_test.rb2
-rw-r--r--activerecord/test/cases/transactions_test.rb3
6 files changed, 17 insertions, 18 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
index 04c8361c64..1b908c3113 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
@@ -36,12 +36,10 @@ module ActiveRecord
# * +wait_timeout+ (optional): number of seconds to block and wait
# for a connection before giving up and raising a timeout error.
def self.create(spec)
- if spec.config[:pool] && spec.config[:pool].to_i > 0
- FixedSizeConnectionPool.new(spec)
- elsif spec.config[:jndi] # JRuby appserver datasource pool; passthrough
+ if spec.config[:jndi] # JRuby appserver datasource pool; passthrough
NewConnectionEveryTime.new(spec)
else
- CachedConnectionPerThread.new(spec)
+ FixedSizeConnectionPool.new(spec)
end
end
@@ -204,18 +202,6 @@ module ActiveRecord
end
end
- # CachedConnectionPerThread is a compatible pseudo-connection pool that
- # caches connections per-thread. In order to hold onto threads in the same
- # manner as ActiveRecord 2.1 and earlier, it only disconnects the
- # connection when the connection is checked in, or when calling
- # ActiveRecord::Base.clear_all_connections!, and not during
- # #release_connection.
- class CachedConnectionPerThread < NewConnectionEveryTime
- def release_connection
- # no-op; keep the connection
- end
- end
-
# FixedSizeConnectionPool provides a full, fixed-size connection pool with
# timed waits when the pool is exhausted.
class FixedSizeConnectionPool < ConnectionPool
@@ -223,7 +209,8 @@ module ActiveRecord
super
# default 5 second timeout
@timeout = spec.config[:wait_timeout] || 5
- @size = spec.config[:pool].to_i
+ # default max pool size to 5
+ @size = (spec.config[:pool] && spec.config[:pool].to_i) || 5
@queue = @connection_mutex.new_cond
@connections = []
@checked_out = []
diff --git a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
index 0a935a1b7a..14c76ac455 100644
--- a/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
@@ -285,6 +285,7 @@ module ActiveRecord
# See http://bugs.mysql.com/bug.php?id=33540 -- the workaround way to
# reset the connection is to change the user to the same user.
@connection.change_user(@config[:username], @config[:password], @config[:database])
+ configure_connection
else
super
end
@@ -538,7 +539,11 @@ module ActiveRecord
end
@connection.real_connect(*@connection_options)
+ configure_connection
+ end
+ def configure_connection
+ encoding = @config[:encoding]
execute("SET NAMES '#{encoding}'") if encoding
# By default, MySQL 'where id is null' selects the last inserted id.
diff --git a/activerecord/lib/active_record/fixtures.rb b/activerecord/lib/active_record/fixtures.rb
index 622cfc3c3f..114141a646 100644
--- a/activerecord/lib/active_record/fixtures.rb
+++ b/activerecord/lib/active_record/fixtures.rb
@@ -955,7 +955,7 @@ module Test #:nodoc:
ActiveRecord::Base.connection.rollback_db_transaction
ActiveRecord::Base.connection.decrement_open_transactions
end
- ActiveRecord::Base.verify_active_connections!
+ ActiveRecord::Base.clear_active_connections!
end
private
diff --git a/activerecord/test/cases/locking_test.rb b/activerecord/test/cases/locking_test.rb
index bbe8582466..df9829195c 100644
--- a/activerecord/test/cases/locking_test.rb
+++ b/activerecord/test/cases/locking_test.rb
@@ -280,6 +280,7 @@ unless current_adapter?(:SQLServerAdapter, :SybaseAdapter, :OpenBaseAdapter)
sleep zzz # block thread 2 for zzz seconds
end
t1 = Time.now
+ Person.clear_active_connections!
end
b = Thread.new do
@@ -287,6 +288,7 @@ unless current_adapter?(:SQLServerAdapter, :SybaseAdapter, :OpenBaseAdapter)
t2 = Time.now
Person.transaction { yield }
t3 = Time.now
+ Person.clear_active_connections!
end
a.join
diff --git a/activerecord/test/cases/threaded_connections_test.rb b/activerecord/test/cases/threaded_connections_test.rb
index 7246a8a62b..54c1470e69 100644
--- a/activerecord/test/cases/threaded_connections_test.rb
+++ b/activerecord/test/cases/threaded_connections_test.rb
@@ -16,12 +16,14 @@ unless %w(FrontBase).include? ActiveRecord::Base.connection.adapter_name
class PooledConnectionsTest < ActiveRecord::TestCase
def setup
+ super
@connection = ActiveRecord::Base.remove_connection
end
def teardown
ActiveRecord::Base.clear_all_connections!
ActiveRecord::Base.establish_connection(@connection)
+ super
end
def checkout_connections
diff --git a/activerecord/test/cases/transactions_test.rb b/activerecord/test/cases/transactions_test.rb
index 8383ba58e9..d3cc69507a 100644
--- a/activerecord/test/cases/transactions_test.rb
+++ b/activerecord/test/cases/transactions_test.rb
@@ -296,6 +296,7 @@ if current_adapter?(:PostgreSQLAdapter)
topic.approved = !topic.approved?
topic.save!
end
+ Topic.clear_active_connections!
end
end
@@ -331,6 +332,7 @@ if current_adapter?(:PostgreSQLAdapter)
dev = Developer.find(1)
assert_equal original_salary, dev.salary
end
+ Developer.clear_active_connections!
end
end
@@ -342,6 +344,7 @@ if current_adapter?(:PostgreSQLAdapter)
# Always expect original salary.
assert_equal original_salary, Developer.find(1).salary
end
+ Developer.clear_active_connections!
end
end