Class: RailsFailover::Redis::HandlerBase

Inherits:
Object
  • Object
show all
Includes:
MonitorMixin, Singleton
Defined in:
lib/rails_failover/redis/handler_base.rb

Direct Known Subclasses

Handler

Constant Summary collapse

PRIMARY_ROLE_STATUS =
"role:master"
PRIMARY_LOADED_STATUS =
"loading:0"
VERIFY_FREQUENCY_BUFFER_PERCENT =
20
SOFT_DISCONNECT_TIMEOUT_SECONDS =
1
SOFT_DISCONNECT_POLL_SECONDS =
0.05

Instance Method Summary collapse

Constructor Details

#initializeHandlerBase

Returns a new instance of HandlerBase.



19
20
21
22
23
24
# File 'lib/rails_failover/redis/handler_base.rb', line 19

def initialize
  @primaries_down = Concurrent::Map.new
  @clients = Concurrent::Map.new

  super() # Monitor#initialize
end

Instance Method Details

#deregister_client(client, id) ⇒ Object



40
41
42
# File 'lib/rails_failover/redis/handler_base.rb', line 40

def deregister_client(client, id)
  clients_for_id(id).delete(client)
end

#primaries_down_countObject



48
49
50
# File 'lib/rails_failover/redis/handler_base.rb', line 48

def primaries_down_count
  primaries_down.size
end

#primary_down?(id) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/rails_failover/redis/handler_base.rb', line 44

def primary_down?(id)
  primaries_down[id]
end

#register_client(client, id) ⇒ Object



36
37
38
# File 'lib/rails_failover/redis/handler_base.rb', line 36

def register_client(client, id)
  clients_for_id(id).put_if_absent(client, true)
end

#verify_primary(config) ⇒ Object



26
27
28
29
30
31
32
33
34
# File 'lib/rails_failover/redis/handler_base.rb', line 26

def verify_primary(config)
  primary_down(config)

  mon_synchronize do
    return if @thread&.alive?
    logger&.warn "Failover for Redis has been initiated"
    @thread = Thread.new { loop_until_all_up }
  end
end