Class: DCell::Registry::ZkPresenceAdapter::NodeRegistry
- Inherits:
-
Object
- Object
- DCell::Registry::ZkPresenceAdapter::NodeRegistry
- Includes:
- Celluloid, Celluloid::Notifications
- Defined in:
- lib/dcell/registries/zk_presence_adapter.rb
Instance Method Summary collapse
- #get(node_id) ⇒ Object
-
#initialize(options) ⇒ NodeRegistry
constructor
A new instance of NodeRegistry.
- #node_update(event, nodes) ⇒ Object
- #nodes ⇒ Object
- #set(node_id, addr) ⇒ Object
Constructor Details
#initialize(options) ⇒ NodeRegistry
Returns a new instance of NodeRegistry.
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/dcell/registries/zk_presence_adapter.rb', line 19 def initialize() @mutex = Mutex.new @current_address = nil Celluloid::Presence::ZkPresence.supervise_as :dcell_presence, { :service_name => :dcell_presence, :node_address => proc { @mutex.synchronize { @current_address } }, :env => [:env] || 'production' } @service_name = :dcell_presence @directory = {} # node_name => address @mapping = {} # zk_path => node_name subscribe("#{@service_name}_nodes", :node_update) @nodes = [] update_directory(presence.nodes) end |
Instance Method Details
#get(node_id) ⇒ Object
39 40 41 |
# File 'lib/dcell/registries/zk_presence_adapter.rb', line 39 def get(node_id) @directory[node_id] end |
#node_update(event, nodes) ⇒ Object
47 48 49 |
# File 'lib/dcell/registries/zk_presence_adapter.rb', line 47 def node_update(event, nodes) update_directory(nodes) end |
#nodes ⇒ Object
43 44 45 |
# File 'lib/dcell/registries/zk_presence_adapter.rb', line 43 def nodes @directory.keys end |
#set(node_id, addr) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/dcell/registries/zk_presence_adapter.rb', line 51 def set(node_id, addr) @mutex.synchronize { @current_address = Marshal.dump [node_id, addr] } presence.on_connected # This causes an address update on zookeeper end |