aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorNick Sieger <nick@nicksieger.com>2008-08-22 12:19:29 -0500
committerNick Sieger <nick@nicksieger.com>2008-08-29 14:12:12 -0500
commitca6d71753f3a2e8a0a29108b7c55ba3b7c8cd943 (patch)
treed0527720f9d7ceaa46fd6a8844fecd46aaa0ae18 /activerecord/lib/active_record
parenta96b7d4c33757364a19ed1fc34f0a89801b8b2d7 (diff)
downloadrails-ca6d71753f3a2e8a0a29108b7c55ba3b7c8cd943.tar.gz
rails-ca6d71753f3a2e8a0a29108b7c55ba3b7c8cd943.tar.bz2
rails-ca6d71753f3a2e8a0a29108b7c55ba3b7c8cd943.zip
Deprecate allow_concurrency and make it have no effect
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/base.rb20
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb25
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb30
-rwxr-xr-xactiverecord/lib/active_record/connection_adapters/abstract_adapter.rb4
4 files changed, 20 insertions, 59 deletions
diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb
index b5ffc471bc..bc6d61301f 100644
--- a/activerecord/lib/active_record/base.rb
+++ b/activerecord/lib/active_record/base.rb
@@ -452,13 +452,6 @@ module ActiveRecord #:nodoc:
cattr_accessor :default_timezone, :instance_writer => false
@@default_timezone = :local
- # Determines whether to use a connection for each thread, or a single shared connection for all threads.
- # Defaults to false. If you're writing a threaded application, set to true
- # and periodically call verify_active_connections! to clear out connections
- # assigned to stale threads.
- cattr_accessor :allow_concurrency, :instance_writer => false
- @@allow_concurrency = false
-
# Specifies the format to use when dumping the database schema with Rails'
# Rakefile. If :sql, the schema is dumped as (potentially database-
# specific) SQL statements. If :ruby, the schema is dumped as an
@@ -1943,22 +1936,11 @@ module ActiveRecord #:nodoc:
end
end
- def thread_safe_scoped_methods #:nodoc:
+ def scoped_methods #:nodoc:
scoped_methods = (Thread.current[:scoped_methods] ||= {})
scoped_methods[self] ||= []
end
- def single_threaded_scoped_methods #:nodoc:
- @scoped_methods ||= []
- end
-
- # pick up the correct scoped_methods version from @@allow_concurrency
- if @@allow_concurrency
- alias_method :scoped_methods, :thread_safe_scoped_methods
- else
- alias_method :scoped_methods, :single_threaded_scoped_methods
- end
-
def current_scoped_methods #:nodoc:
scoped_methods.last
end
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 365c80fe1d..04c8361c64 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
@@ -154,7 +154,7 @@ module ActiveRecord
private
def new_connection
- config = spec.config.reverse_merge(:allow_concurrency => ActiveRecord::Base.allow_concurrency)
+ config = spec.config.reverse_merge(:allow_concurrency => true)
ActiveRecord::Base.send(spec.adapter_method, config)
end
@@ -285,9 +285,12 @@ module ActiveRecord
end
end
- module ConnectionHandlerMethods
+ class ConnectionHandler
+ attr_reader :connection_pools_lock
+
def initialize(pools = {})
@connection_pools = pools
+ @connection_pools_lock = Monitor.new
end
def connection_pools
@@ -361,24 +364,6 @@ module ActiveRecord
klass = klass.superclass
end
end
- end
-
- # This connection handler is not thread-safe, as it does not protect access
- # to the underlying connection pools.
- class SingleThreadConnectionHandler
- include ConnectionHandlerMethods
- end
-
- # This connection handler is thread-safe. Each access or modification of a thread
- # pool is synchronized by an internal monitor.
- class MultipleThreadConnectionHandler
- attr_reader :connection_pools_lock
- include ConnectionHandlerMethods
-
- def initialize(pools = {})
- super
- @connection_pools_lock = Monitor.new
- end
# Apply monitor to all public methods that access the pool.
synchronize :establish_connection, :retrieve_connection,
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
index 0910db1951..47fc11a620 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
@@ -14,25 +14,7 @@ module ActiveRecord
# The connection handler
cattr_accessor :connection_handler, :instance_writer => false
- @@connection_handler = ConnectionAdapters::SingleThreadConnectionHandler.new
-
- # Turning on allow_concurrency changes the single threaded connection handler
- # for a multiple threaded one, so that multi-threaded access of the
- # connection pools is synchronized.
- def self.allow_concurrency=(flag)
- if @@allow_concurrency != flag
- @@allow_concurrency = flag
- # When switching connection handlers, preserve the existing pools so that
- # #establish_connection doesn't need to be called again.
- if @@allow_concurrency
- self.connection_handler = ConnectionAdapters::MultipleThreadConnectionHandler.new(
- self.connection_handler.connection_pools)
- else
- self.connection_handler = ConnectionAdapters::SingleThreadConnectionHandler.new(
- self.connection_handler.connection_pools)
- end
- end
- end
+ @@connection_handler = ConnectionAdapters::ConnectionHandler.new
# Returns the connection currently associated with the class. This can
# also be used to "borrow" the connection to do database work that isn't
@@ -109,6 +91,16 @@ module ActiveRecord
end
class << self
+ # Deprecated and no longer has any effect.
+ def allow_concurrency
+ ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_concurrency has been deprecated and no longer has any effect. Please remove all references to allow_concurrency.")
+ end
+
+ # Deprecated and no longer has any effect.
+ def allow_concurrency=(flag)
+ ActiveSupport::Deprecation.warn("ActiveRecord::Base.allow_concurrency= has been deprecated and no longer has any effect. Please remove all references to allow_concurrency=.")
+ end
+
# Returns the connection currently associated with the class. This can
# also be used to "borrow" the connection to do database work unrelated
# to any of the specific Active Records.
diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
index c37ebf1410..7ef8834547 100755
--- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb
@@ -109,7 +109,9 @@ module ActiveRecord
# ROLLBACK and swallows any exceptions which is probably not enough to
# ensure the connection is clean.
def reset!
- execute "ROLLBACK" rescue nil
+ silence_stderr do # postgres prints on stderr when you do this w/o a txn
+ execute "ROLLBACK" rescue nil
+ end
end
# Returns true if its safe to reload the connection between requests for development mode.