An even simpler library for locking with ZooKeeper based on node-zookeeper-client
This locking library is based on the ZooKeeper lock recipe with one key difference: the lock nodes it creates are ephemeral.
The ZK lock recipe recommends negotiating for the lock under the requested lock node with child nodes like
_locknode_/guid-lock-<sequence number>. However, ephemeral nodes may not have children, and non-ephemeral state reduces zookeeper's partition resilience. The operators of applications with a large number of unique locks, especially a monotonically increasing number of locks (as when locking on a unique timestamp), will suffer zookeeper issues in production.
zk-ultralight is meant to provide locking with less production impact.
var cxn = zkultragetCxnsettingsZOOKEEPER_URLS;asyncseriescxnlockbindcxn '/some/lock/i/need' processtitle +'-'+ processpidsomeAsyncActioncxnunlockbindcxn '/some/lock/i/need'callback;;
bin/non-ephemerals.js prints a JSON array of the non-ephemeral nodes (which have a
mtime less than
--since milliseconds in the past) in your zookeeper cluster to stdout. You can run it in the vm after running the test suite to see the non-ephemerals left after the tests:
$ bin/non-ephemerals.js /["/plum","/dog","/foo/bar","/plumber","/111","/apple","/cat"]
--since is two weeks, so this example shows only znodes with
mtimes in the last two weeks.
bin/rm-znodes.js accepts a JSON array of znodes on stdin and removes them from your zookeeper cluster. The usual usage will be
bin/non-ephemerals.js / | bin/rm-znodes.js to remove all not-recently-used non-ephemeral nodes without children. Sequential runs will eventually remove all znode subtrees which do not contain ephemeral nodes.
The Vagrantfile ships a vm with a running zookeeper instance, which is all you need to run tests.
Optionally, the zookeeper server and port can be given with:
ZK=$(docker-machine ip zk):2181 npm run test
npm run-script lint
npm run-script coverage
Library is distributed under the Apache license.