Class: DCell::Registry::ZkPresenceAdapter::NodeRegistry

Inherits:
Object
  • Object
show all
Includes:
Celluloid, Celluloid::Notifications
Defined in:
lib/dcell/registries/zk_presence_adapter.rb

Instance Method Summary collapse

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(options)
	@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 => options[: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

#nodesObject



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