Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

use thread locals and an instance variable within QueryCache#BodyProx…

…y to maintain appropriate linkage with AR database connection across threads
  • Loading branch information...
commit f41b58d3b25eb57ba5c890b713301ba2e3fcb9b7 1 parent 3088d23
Mark J. Titorenko mjtko authored
2  activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rb
View
@@ -314,7 +314,7 @@ def new_connection
end
def current_connection_id #:nodoc:
- Thread.current.object_id
+ ActiveRecord::Base.connection_id ||= Thread.current.object_id
end
def checkout_new_connection
8 activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
View
@@ -115,6 +115,14 @@ def connection
retrieve_connection
end
+ def connection_id
+ Thread.current['ActiveRecord::Base.connection_id']
+ end
+
+ def connection_id=(connection_id)
+ Thread.current['ActiveRecord::Base.connection_id'] = connection_id
+ end
+
# Returns the configuration of the associated connection as a hash:
#
# ActiveRecord::Base.connection_config
6 activerecord/lib/active_record/query_cache.rb
View
@@ -28,9 +28,10 @@ def initialize(app)
end
class BodyProxy # :nodoc:
- def initialize(original_cache_value, target)
+ def initialize(original_cache_value, target, connection_id)
@original_cache_value = original_cache_value
@target = target
+ @connection_id = connection_id
end
def method_missing(method_sym, *arguments, &block)
@@ -48,6 +49,7 @@ def each(&block)
def close
@target.close if @target.respond_to?(:close)
ensure
+ ActiveRecord::Base.connection_id = @connection_id
ActiveRecord::Base.connection.clear_query_cache
unless @original_cache_value
ActiveRecord::Base.connection.disable_query_cache!
@@ -60,7 +62,7 @@ def call(env)
ActiveRecord::Base.connection.enable_query_cache!
status, headers, body = @app.call(env)
- [status, headers, BodyProxy.new(old, body)]
+ [status, headers, BodyProxy.new(old, body, ActiveRecord::Base.connection_id)]
rescue Exception => e
ActiveRecord::Base.connection.clear_query_cache
unless old
Please sign in to comment.
Something went wrong with that request. Please try again.