zookeeper
An interface to the Zookeeper distributed configuration server.
License
Copyright 2008 Phillip Pearson, and 2010 Twitter, Inc. Licensed under the MIT License. See the included LICENSE file. Portions copyright 2008-2010 the Apache Software Foundation, licensed under the Apache 2 license, and used with permission.
Install
sudo gem install zookeeper
Usage
Connect to a server:
require 'rubygems'
require 'zookeeper'
z = Zookeeper.new("localhost:2181")
Create, set and read nodes:
z.create("/bacon", "text to be stored in the new node", 0)
data, stat = z.get("/bacon")
# => ["text to be stored in the new node"...]
z.set("/bacon", "an entirely different line of text", stat.version)
z.set("/bacon", "this won't work", stat.version)
# CZookeeper::BadVersionError: expected version does not match actual version
data, stat = z.get("/bacon")
# => ["an entirely different line of text"...]
z.delete("/bacon", stat.version)
Create ephemeral and sequence nodes:
z.create("/parent", "parent node", 0)
z.create("/parent/test-",
"an ordered ephemeral node",
Zookeeper::EPHEMERAL | Zookeeper::SEQUENCE)
# => "/parent/test-0"
z.create("/parent/test-",
"an ordered ephemeral node",
Zookeeper::EPHEMERAL | Zookeeper::SEQUENCE)
# => "/parent/test-1"
Acquire locks:
z.try_acquire "/parent/lock-", "content for the lock file" do |have_lock|
puts have_lock ? "we have the lock" : "we don't have the lock"
end