diff options
author | Lin Jen-Shin <godfat@godfat.org> | 2017-03-10 21:16:12 +0800 |
---|---|---|
committer | Lin Jen-Shin <godfat@godfat.org> | 2017-03-11 01:25:02 +0800 |
commit | 22ff9b78aef7356f36d259d8b0a05d7d02565c9a (patch) | |
tree | c9c1b90359eef554ecf49f59a26bf33a806576d9 | |
parent | daa4590ca3e64220bff1a4d94f9d1a5ddadf42fa (diff) | |
download | gitlab-ce-22ff9b78aef7356f36d259d8b0a05d7d02565c9a.tar.gz |
Try out the monkey patch to fix the middlewarebackport-cache-middleware-fix
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
-rw-r--r-- | config/initializers/fix_local_cache_middleware.rb | 24 |
1 files changed, 24 insertions, 0 deletions
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) |