Try out the monkey patch to fix the middleware

which isn't properly cleaning up whenever something
is thrown, not raised. See:

https://gitlab.com/gitlab-org/gitlab-ee/merge_requests/1402#note_25128108
This commit is contained in:
Lin Jen-Shin 2017-03-10 21:16:12 +08:00
parent daa4590ca3
commit 22ff9b78ae
1 changed files with 24 additions and 0 deletions

View File

@ -0,0 +1,24 @@
module LocalCacheRegistryCleanupWithEnsure
LocalCacheRegistry =
ActiveSupport::Cache::Strategy::LocalCache::LocalCacheRegistry
LocalStore =
ActiveSupport::Cache::Strategy::LocalCache::LocalStore
def call(env)
LocalCacheRegistry.set_cache_for(local_cache_key, LocalStore.new)
response = @app.call(env)
response[2] = ::Rack::BodyProxy.new(response[2]) do
LocalCacheRegistry.set_cache_for(local_cache_key, nil)
end
cleanup_after_response = true # ADDED THIS LINE
response
rescue Rack::Utils::InvalidParameterError
[400, {}, []]
ensure # ADDED ensure CLAUSE to cleanup when something is thrown
LocalCacheRegistry.set_cache_for(local_cache_key, nil) unless
cleanup_after_response
end
end
ActiveSupport::Cache::Strategy::LocalCache::Middleware
.prepend(LocalCacheRegistryCleanupWithEnsure)