From 22ff9b78aef7356f36d259d8b0a05d7d02565c9a Mon Sep 17 00:00:00 2001 From: Lin Jen-Shin Date: Fri, 10 Mar 2017 21:16:12 +0800 Subject: 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 --- config/initializers/fix_local_cache_middleware.rb | 24 +++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 config/initializers/fix_local_cache_middleware.rb diff --git a/config/initializers/fix_local_cache_middleware.rb b/config/initializers/fix_local_cache_middleware.rb new file mode 100644 index 00000000000..cb37f9ed22c --- /dev/null +++ b/config/initializers/fix_local_cache_middleware.rb @@ -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) -- cgit v1.2.1