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