From 764eaedf810af307d68d5e6b552988db1cb15f54 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Tue, 16 Dec 2014 12:38:44 +0100 Subject: Improve Redis::Store monkey-patch robustness --- config/initializers/redis-store-fix-expiry.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/config/initializers/redis-store-fix-expiry.rb b/config/initializers/redis-store-fix-expiry.rb index dd27596cd0b..813d4c76c81 100644 --- a/config/initializers/redis-store-fix-expiry.rb +++ b/config/initializers/redis-store-fix-expiry.rb @@ -4,13 +4,36 @@ module Gitlab class Redis class Store module Namespace + # Redis::Store#expire in redis-store 1.1.4 does not respect namespaces; + # this new method does. def setex(key, expires_in, value, options=nil) namespace(key) { |key| super(key, expires_in, value) } end + # Redis::Store#expire in redis-store 1.1.4 does not respect namespaces; + # this new method does. def expire(key, expires_in) namespace(key) { |key| super(key, expires_in) } end + + private + + # Our new definitions of #setex and #expire above assume that the + # #namespace method exists. Because we cannot be sure of that, we + # re-implement the #namespace method from Redis::Store::Namespace so + # that it all Redis::Store instances, whether they use namespacing or + # not. + # + # Based on lib/redis/store/namespace.rb L49-51 (redis-store 1.1.4) + def namespace(key) + if @namespace + yield interpolate(key) + else + # This Redis::Store instance does not use a namespace so we should + # just pass through the key. + yield key + end + end end end end -- cgit v1.2.1