class Redis::Cluster::Slot
Constants
- ROLE_SLAVE
Public Class Methods
new(available_slots, node_flags = {}, with_replica = false)
click to toggle source
# File lib/redis/cluster/slot.rb, line 11 def initialize(available_slots, node_flags = {}, with_replica = false) @with_replica = with_replica @node_flags = node_flags @map = build_slot_node_key_map(available_slots) end
Public Instance Methods
exists?(slot)
click to toggle source
# File lib/redis/cluster/slot.rb, line 17 def exists?(slot) @map.key?(slot) end
find_node_key_of_master(slot)
click to toggle source
# File lib/redis/cluster/slot.rb, line 21 def find_node_key_of_master(slot) return nil unless exists?(slot) @map[slot][:master] end
find_node_key_of_slave(slot)
click to toggle source
# File lib/redis/cluster/slot.rb, line 27 def find_node_key_of_slave(slot) return nil unless exists?(slot) return find_node_key_of_master(slot) if replica_disabled? @map[slot][:slaves].to_a.sample end
put(slot, node_key)
click to toggle source
# File lib/redis/cluster/slot.rb, line 34 def put(slot, node_key) assign_node_key(@map, slot, node_key) nil end
Private Instance Methods
assign_node_key(mappings, slot, node_key)
click to toggle source
# File lib/redis/cluster/slot.rb, line 59 def assign_node_key(mappings, slot, node_key) mappings[slot] ||= { master: nil, slaves: ::Set.new } if master?(node_key) mappings[slot][:master] = node_key else mappings[slot][:slaves].add(node_key) end end
build_slot_node_key_map(available_slots)
click to toggle source
# File lib/redis/cluster/slot.rb, line 53 def build_slot_node_key_map(available_slots) available_slots.each_with_object({}) do |(node_key, slots), acc| slots.each { |slot| assign_node_key(acc, slot, node_key) } end end
master?(node_key)
click to toggle source
# File lib/redis/cluster/slot.rb, line 45 def master?(node_key) !slave?(node_key) end
replica_disabled?()
click to toggle source
# File lib/redis/cluster/slot.rb, line 41 def replica_disabled? !@with_replica end
slave?(node_key)
click to toggle source
# File lib/redis/cluster/slot.rb, line 49 def slave?(node_key) @node_flags[node_key] == ROLE_SLAVE end