class DCell::Registry::ZkAdapter::Registry
Public Class Methods
new(zk, base_path, name, ephemeral)
click to toggle source
# File lib/dcell/registries/zk_adapter.rb, line 44 def initialize(zk, base_path, name, ephemeral) @zk = zk @base_path = File.join(base_path, name.to_s) @ephemeral = ephemeral @zk.mkdir_p @base_path @events = {} end
Public Instance Methods
all()
click to toggle source
# File lib/dcell/registries/zk_adapter.rb, line 86 def all @zk.children @base_path end
clear_all()
click to toggle source
# File lib/dcell/registries/zk_adapter.rb, line 97 def clear_all # delete znodes so any registered # callback is triggered all.each do |key| remove key end @events.values.compact.each(&:unsubscribe) @events.clear @zk.rm_rf @base_path @zk.mkdir_p @base_path end
get(key)
click to toggle source
# File lib/dcell/registries/zk_adapter.rb, line 70 def get(key) register(key) result, _ = @zk.get("#{@base_path}/#{key}", watch: true) Marshal.load result rescue ZK::Exceptions::NoNode end
register(key)
click to toggle source
# File lib/dcell/registries/zk_adapter.rb, line 52 def register(key) path = "#{@base_path}/#{key}" @events[path] ||= @zk.register(path) do |event| key = event.path.match(/#{@base_path}\/(\w+)/)[1] @events[event.path].unsubscribe @events[event.path] = nil if event.node_changed? Celluloid::logger.debug "zk callback: node changed!" Node.update(key) end if event.node_deleted? Celluloid::logger.debug "zk callback: node deleted!" Node.remove(key) end end end
remove(key)
click to toggle source
# File lib/dcell/registries/zk_adapter.rb, line 90 def remove(key) keys.each do |key| path = "#{@base_path}/#{key}" @zk.delete path end end
set(key, value)
click to toggle source
# File lib/dcell/registries/zk_adapter.rb, line 77 def set(key, value) register(key) path = "#{@base_path}/#{key}" string = Marshal.dump value @zk.set path, string rescue ZK::Exceptions::NoNode @zk.create path, string, :ephemeral => @ephemeral end