Class: DCell::Registry::ZkAdapter::Registry
- Inherits:
-
Object
- Object
- DCell::Registry::ZkAdapter::Registry
- Defined in:
- lib/dcell/registries/zk_adapter.rb
Instance Method Summary collapse
- #all ⇒ Object
- #clear_all ⇒ Object
- #get(key) ⇒ Object
-
#initialize(zk, base_path, name, ephemeral) ⇒ Registry
constructor
A new instance of Registry.
- #register(key) ⇒ Object
- #remove(key) ⇒ Object
- #set(key, value) ⇒ Object
Constructor Details
#initialize(zk, base_path, name, ephemeral) ⇒ Registry
Returns a new instance of Registry.
44 45 46 47 48 49 50 |
# 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 |
Instance Method Details
#all ⇒ Object
86 87 88 |
# File 'lib/dcell/registries/zk_adapter.rb', line 86 def all @zk.children @base_path end |
#clear_all ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 |
# 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) ⇒ Object
70 71 72 73 74 75 |
# 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) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# 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) ⇒ Object
90 91 92 93 94 95 |
# 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) ⇒ Object
77 78 79 80 81 82 83 84 |
# 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 |