Revert "Bump redis to 4.2.0."

This reverts commit 98bc28cea2.
This commit is contained in:
Guo Xiang Tan 2020-06-10 14:52:05 +08:00
parent 98bc28cea2
commit a3dfd553a1
No known key found for this signature in database
GPG Key ID: FBD110179AAC1F20
6 changed files with 43 additions and 5 deletions

View File

@ -310,7 +310,7 @@ GEM
msgpack (>= 0.4.3)
optimist (>= 3.0.0)
rchardet (1.8.0)
redis (4.2.0)
redis (4.1.4)
redis-namespace (1.7.0)
redis (>= 3.0.4)
regexp_parser (1.7.1)

View File

@ -65,7 +65,7 @@ if ENV["ACTIVE_RECORD_RAILS_FAILOVER"]
end
RailsFailover::ActiveRecord.register_force_reading_role_callback do
Discourse.redis.exists?(
Discourse.redis.exists(
Discourse::PG_READONLY_MODE_KEY,
Discourse::PG_FORCE_READONLY_MODE_KEY
)

View File

@ -43,7 +43,7 @@ class AdminConfirmation
end
def self.exists_for?(user_id)
Discourse.redis.exists? "admin-confirmation:#{user_id}"
Discourse.redis.exists "admin-confirmation:#{user_id}"
end
def self.find_by_code(token)

View File

@ -489,7 +489,7 @@ module Discourse
end
def self.readonly_mode?(keys = READONLY_KEYS)
recently_readonly? || Discourse.redis.exists?(*keys)
recently_readonly? || Discourse.redis.exists(*keys)
end
def self.pg_readonly_mode?

View File

@ -193,7 +193,7 @@ class DiscourseRedis
end
# Proxy key methods through, but prefix the keys with the namespace
[:append, :blpop, :brpop, :brpoplpush, :decr, :decrby, :expire, :expireat, :exists, :exists?, :get, :getbit, :getrange, :getset,
[:append, :blpop, :brpop, :brpoplpush, :decr, :decrby, :expire, :expireat, :get, :getbit, :getrange, :getset,
:hdel, :hexists, :hget, :hgetall, :hincrby, :hincrbyfloat, :hkeys, :hlen, :hmget, :hmset, :hset, :hsetnx, :hvals, :incr,
:incrby, :incrbyfloat, :lindex, :linsert, :llen, :lpop, :lpush, :lpushx, :lrange, :lrem, :lset, :ltrim,
:mapped_hmset, :mapped_hmget, :mapped_mget, :mapped_mset, :mapped_msetnx, :move, :mset,
@ -207,6 +207,19 @@ class DiscourseRedis
end
end
# Implement our own because https://github.com/redis/redis-rb/issues/698 has stalled
def exists(*keys)
keys.map! { |a| "#{namespace}:#{a}" } if @namespace
DiscourseRedis.ignore_readonly do
@redis.synchronize do |client|
client.call([:exists, *keys]) do |value|
value > 0
end
end
end
end
def mget(*args)
args.map! { |a| "#{namespace}:#{a}" } if @namespace
DiscourseRedis.ignore_readonly { @redis.mget(*args) }

View File

@ -87,6 +87,31 @@ describe DiscourseRedis do
expect(Discourse.recently_readonly?).to eq(true)
end
end
describe '.exists' do
it 'should return false when key is not present' do
expect(Discourse.redis.exists('test')).to eq(false)
end
it 'should return false when keys are not present' do
expect(Discourse.redis.exists('test', 'test2')).to eq(false)
end
it 'should return true when key is present' do
Discourse.redis.set('test', 1)
expect(Discourse.redis.exists('test')).to eq(true)
end
it 'should return true when any key is present' do
Discourse.redis.set('test', 1)
Discourse.redis.set('test2', 1)
expect(Discourse.redis.exists('test')).to eq(true)
expect(Discourse.redis.exists('test', 'test2')).to eq(true)
expect(Discourse.redis.exists('test2', 'test3')).to eq(true)
end
end
end
context '.slave_host' do