提交 ea341b8e 编写于 作者: S Santiago Pastorino

Merge pull request #3243 from mjtko/connection-pool-thread-fix

QueryCache/ConnectionPool thread fix (was #1670)
......@@ -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
......
......@@ -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
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册