提交 a9dd6e53 编写于 作者: B Brandon Medenwald 提交者: George Claghorn

Redis cache store: fail gracefully when max clients reached

上级 3a6c14d0
......@@ -471,7 +471,7 @@ def serialize_entries(entries, raw: false)
def failsafe(method, returning: nil)
yield
rescue ::Redis::BaseConnectionError => e
rescue ::Redis::BaseError => e
handle_exception exception: e, method: method, returning: returning
returning
end
......
......@@ -234,7 +234,13 @@ def ensure_connected
end
end
class FailureSafetyTest < StoreTest
class MaxClientsReachedRedisClient < Redis::Client
def ensure_connected
raise Redis::CommandError
end
end
class FailureSafetyFromUnavailableClientTest < StoreTest
include FailureSafetyBehavior
private
......@@ -250,6 +256,21 @@ def emulating_unavailability
end
end
class FailureSafetyFromMaxClientsReachedErrorTest < StoreTest
include FailureSafetyBehavior
private
def emulating_unavailability
old_client = Redis.send(:remove_const, :Client)
Redis.const_set(:Client, MaxClientsReachedRedisClient)
yield ActiveSupport::Cache::RedisCacheStore.new
ensure
Redis.send(:remove_const, :Client)
Redis.const_set(:Client, old_client)
end
end
class DeleteMatchedTest < StoreTest
test "deletes keys matching glob" do
@cache.write("foo", "bar")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册