Permalink
Browse files

clear and disable query cache when an exception is raised from called…

… middleware
  • Loading branch information...
tenderlove committed Aug 28, 2011
1 parent 8653ac3 commit 1130b720718efc7899aae906c5301f6a67862845
Showing with 33 additions and 1 deletion.
  1. +6 −0 activerecord/lib/active_record/query_cache.rb
  2. +27 −1 activerecord/test/cases/query_cache_test.rb
@@ -61,6 +61,12 @@ def call(env)
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 @@ def setup
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

0 comments on commit 1130b72

Please sign in to comment.