提交 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 ...@@ -314,7 +314,7 @@ def new_connection
end end
def current_connection_id #:nodoc: def current_connection_id #:nodoc:
Thread.current.object_id ActiveRecord::Base.connection_id ||= Thread.current.object_id
end end
def checkout_new_connection def checkout_new_connection
......
...@@ -115,6 +115,14 @@ def connection ...@@ -115,6 +115,14 @@ def connection
retrieve_connection retrieve_connection
end 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: # Returns the configuration of the associated connection as a hash:
# #
# ActiveRecord::Base.connection_config # ActiveRecord::Base.connection_config
......
...@@ -28,9 +28,10 @@ def initialize(app) ...@@ -28,9 +28,10 @@ def initialize(app)
end end
class BodyProxy # :nodoc: class BodyProxy # :nodoc:
def initialize(original_cache_value, target) def initialize(original_cache_value, target, connection_id)
@original_cache_value = original_cache_value @original_cache_value = original_cache_value
@target = target @target = target
@connection_id = connection_id
end end
def method_missing(method_sym, *arguments, &block) def method_missing(method_sym, *arguments, &block)
...@@ -48,6 +49,7 @@ def each(&block) ...@@ -48,6 +49,7 @@ def each(&block)
def close def close
@target.close if @target.respond_to?(:close) @target.close if @target.respond_to?(:close)
ensure ensure
ActiveRecord::Base.connection_id = @connection_id
ActiveRecord::Base.connection.clear_query_cache ActiveRecord::Base.connection.clear_query_cache
unless @original_cache_value unless @original_cache_value
ActiveRecord::Base.connection.disable_query_cache! ActiveRecord::Base.connection.disable_query_cache!
...@@ -60,7 +62,7 @@ def call(env) ...@@ -60,7 +62,7 @@ def call(env)
ActiveRecord::Base.connection.enable_query_cache! ActiveRecord::Base.connection.enable_query_cache!
status, headers, body = @app.call(env) 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 rescue Exception => e
ActiveRecord::Base.connection.clear_query_cache ActiveRecord::Base.connection.clear_query_cache
unless old unless old
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册