summaryrefslogtreecommitdiff
path: root/config/initializers/fix_local_cache_middleware.rb
diff options
context:
space:
mode:
authorDimitrie Hoekstra <dimitrie@gitlab.com>2017-03-17 17:04:51 +0000
committerDimitrie Hoekstra <dimitrie@gitlab.com>2017-03-17 17:04:51 +0000
commitb6bab6ce47813c67ea1e2c7d4fde7d9e320da99c (patch)
tree6c1b7db2aeebc5756c73842cffef22df655cc820 /config/initializers/fix_local_cache_middleware.rb
parent116efdaf128ddcccc30fb82615cd964b35cacc53 (diff)
parentbb1620aaf712c22c61fda098260f481ad79a05e2 (diff)
downloadgitlab-ce-b6bab6ce47813c67ea1e2c7d4fde7d9e320da99c.tar.gz
Merge branch 'master' into 'focus-mode-board'focus-mode-board
# Conflicts: # app/views/shared/issuable/_filter.html.haml
Diffstat (limited to 'config/initializers/fix_local_cache_middleware.rb')
-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)