Module: Semian::RedisV4

Includes:
Adapter
Defined in:
lib/semian/redis.rb

Constant Summary collapse

ResourceBusyError =
::Redis::ResourceBusyError
CircuitOpenError =
::Redis::CircuitOpenError
ResolveError =
::Redis::ResolveError

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Adapter

#clear_semian_resource, #semian_resource

Class Method Details

.included(base) ⇒ Object

The naked methods are exposed as ‘raw_query` and `raw_connect` for instrumentation purpose



85
86
87
88
89
90
91
# File 'lib/semian/redis.rb', line 85

def included(base)
  base.send(:alias_method, :raw_io, :io)
  base.send(:remove_method, :io)

  base.send(:alias_method, :raw_connect, :connect)
  base.send(:remove_method, :connect)
end

Instance Method Details

#connectObject



110
111
112
113
114
115
116
117
118
# File 'lib/semian/redis.rb', line 110

def connect
  acquire_semian_resource(adapter: :redis, scope: :connection) do
    raw_connect
  rescue SocketError, RuntimeError => e
    raise ResolveError, semian_identifier if dns_resolve_failure?(e.cause || e)

    raise
  end
end

#io(&block) ⇒ Object



102
103
104
105
106
107
108
# File 'lib/semian/redis.rb', line 102

def io(&block)
  acquire_semian_resource(adapter: :redis, scope: :query) do
    reply = raw_io(&block)
    raise_if_out_of_memory(reply)
    reply
  end
end

#semian_identifierObject



94
95
96
97
98
99
100
# File 'lib/semian/redis.rb', line 94

def semian_identifier
  @semian_identifier ||= begin
    name = semian_options && semian_options[:name]
    name ||= "#{location}/#{db}"
    :"redis_#{name}"
  end
end

#with_resource_timeout(temp_timeout) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/semian/redis.rb', line 120

def with_resource_timeout(temp_timeout)
  timeout = options[:timeout]
  connect_timeout = options[:connect_timeout]
  read_timeout = options[:read_timeout]
  write_timeout = options[:write_timeout]

  begin
    connection.timeout = temp_timeout if connected?
    options[:timeout] = Float(temp_timeout)
    options[:connect_timeout] = Float(temp_timeout)
    options[:read_timeout] = Float(temp_timeout)
    options[:write_timeout] = Float(temp_timeout)
    yield
  ensure
    options[:timeout] = timeout
    options[:connect_timeout] = connect_timeout
    options[:read_timeout] = read_timeout
    options[:write_timeout] = write_timeout
    connection.timeout = self.timeout if connected?
  end
end