mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
clear and disable query cache when an exception is raised from called middleware
This commit is contained in:
@@ -61,6 +61,12 @@ module ActiveRecord
|
||||
|
||||
status, headers, body = @app.call(env)
|
||||
[status, headers, BodyProxy.new(old, body)]
|
||||
rescue Exception => e
|
||||
ActiveRecord::Base.connection.clear_query_cache
|
||||
unless old
|
||||
ActiveRecord::Base.connection.disable_query_cache!
|
||||
end
|
||||
raise e
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,6 +13,32 @@ class QueryCacheTest < ActiveRecord::TestCase
|
||||
ActiveRecord::Base.connection.disable_query_cache!
|
||||
end
|
||||
|
||||
def test_exceptional_middleware_clears_and_disables_cache_on_error
|
||||
assert !ActiveRecord::Base.connection.query_cache_enabled, 'cache off'
|
||||
|
||||
mw = ActiveRecord::QueryCache.new lambda { |env|
|
||||
Task.find 1
|
||||
Task.find 1
|
||||
assert_equal 1, ActiveRecord::Base.connection.query_cache.length
|
||||
raise "lol borked"
|
||||
}
|
||||
assert_raises(RuntimeError) { mw.call({}) }
|
||||
|
||||
assert_equal 0, ActiveRecord::Base.connection.query_cache.length
|
||||
assert !ActiveRecord::Base.connection.query_cache_enabled, 'cache off'
|
||||
end
|
||||
|
||||
def test_exceptional_middleware_leaves_enabled_cache_alone
|
||||
ActiveRecord::Base.connection.enable_query_cache!
|
||||
|
||||
mw = ActiveRecord::QueryCache.new lambda { |env|
|
||||
raise "lol borked"
|
||||
}
|
||||
assert_raises(RuntimeError) { mw.call({}) }
|
||||
|
||||
assert ActiveRecord::Base.connection.query_cache_enabled, 'cache off'
|
||||
end
|
||||
|
||||
def test_middleware_delegates
|
||||
called = false
|
||||
mw = ActiveRecord::QueryCache.new lambda { |env|
|
||||
@@ -213,4 +239,4 @@ class QueryCacheBodyProxyTest < ActiveRecord::TestCase
|
||||
assert_equal proxy.to_path, "/path"
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user