FIX: Set a not expiring key for user enabled readonly mode.

This commit is contained in:
Guo Xiang Tan
2016-06-29 14:19:18 +08:00
parent 7619c2fa2f
commit 64858c10fe
3 changed files with 48 additions and 27 deletions

View File

@ -216,11 +216,18 @@ module Discourse
end
READONLY_MODE_KEY_TTL ||= 60
READONLY_MODE_KEY ||= 'readonly_mode'.freeze
USER_READONLY_MODE_KEY ||= 'readonly_mode:user'.freeze
def self.enable_readonly_mode(user_enabled: false)
if user_enabled
$redis.set(USER_READONLY_MODE_KEY, 1)
else
$redis.setex(READONLY_MODE_KEY, READONLY_MODE_KEY_TTL, 1)
keep_readonly_mode
end
def self.enable_readonly_mode
$redis.setex(readonly_mode_key, READONLY_MODE_KEY_TTL, 1)
MessageBus.publish(readonly_channel, true)
keep_readonly_mode
true
end
@ -228,20 +235,21 @@ module Discourse
# extend the expiry by 1 minute every 30 seconds
Thread.new do
while readonly_mode?
$redis.expire(readonly_mode_key, READONLY_MODE_KEY_TTL)
$redis.expire(READONLY_MODE_KEY, READONLY_MODE_KEY_TTL)
sleep 30.seconds
end
end
end
def self.disable_readonly_mode
$redis.del(readonly_mode_key)
def self.disable_readonly_mode(user_enabled: false)
key = user_enabled ? USER_READONLY_MODE_KEY : READONLY_MODE_KEY
$redis.del(key)
MessageBus.publish(readonly_channel, false)
true
end
def self.readonly_mode?
recently_readonly? || !!$redis.get(readonly_mode_key)
recently_readonly? || !!$redis.get(READONLY_MODE_KEY)
end
def self.request_refresh!
@ -310,10 +318,6 @@ module Discourse
Rails.configuration.action_controller.asset_host
end
def self.readonly_mode_key
"readonly_mode"
end
def self.readonly_channel
"/site/read-only"
end