summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2017-03-10 21:16:12 +0800
committerLin Jen-Shin <godfat@godfat.org>2017-03-11 01:25:02 +0800
commit22ff9b78aef7356f36d259d8b0a05d7d02565c9a (patch)
treec9c1b90359eef554ecf49f59a26bf33a806576d9
parentdaa4590ca3e64220bff1a4d94f9d1a5ddadf42fa (diff)
downloadgitlab-ce-backport-cache-middleware-fix.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.rb24
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)