class Redis::ReconnectWithReadonly
Constants
- VERSION
Attributes
initial_retry_wait[RW]
logger[RW]
max_retry_wait[RW]
reconnect_attempts[RW]
Public Class Methods
reconnect_with_readonly(redis) { |block| ... }
click to toggle source
# File lib/redis/reconnect_with_readonly.rb, line 17 def self.reconnect_with_readonly(redis, &block) retries = 0 begin yield block rescue CommandError => e if e.message =~ /READONLY/ if retries < reconnect_attempts wait = initial_retry_wait * retries wait = [wait, max_retry_wait].min if max_retry_wait logger.info { "Reconnect with readonly: #{e.message} " \ "(retries: #{retries}/#{reconnect_attempts}) (wait: #{wait}sec)" } if logger sleep wait retries += 1 redis.disconnect logger.debug { "Reconnect with readonly: disconnected and retry" } if logger retry else logger.info { "Reconnect with readonly: Give up " \ "(retries: #{retries}/#{reconnect_attempts})" } if logger raise e end else raise e end end end