light-node-zookeeper
Version:
small node zookeeper
79 lines (72 loc) • 2.37 kB
JavaScript
var promise = require("../lib/promise");
var ZK = require("../lib/zk_promise");
var assert = require ('assert');
var util = require('util');
var connect = (process.argv[2] || 'localhost:2181');
var deferred_watcher_ready = promise.defer();
var deferred_watcher_triggered = promise.defer();
var zk_config = {
connect:connect,
debug_level:ZK.ZOO_LOG_LEVEL_WARN,
timeout:20000,
host_order_deterministic:false
};
//reader
var zk_r = new ZK ();
zk_r.setLogger(true);
zk_r.init (zk_config);
var context = {};
zk_r.on_connected()
.then (function (zkk){
console.log ("reader on_connected: zk=%j", zkk);
return zkk.create ("/node.js2", "some value", ZK.ZOO_SEQUENCE | ZK.ZOO_EPHEMERAL);
})
.addBoth (function (pathOrErrNo) {
var path;
if (pathOrErrNo === -110) {
console.log ("path already exists, so create failed with -110 (this is ok)");
path = '/node.js2';
} else if (typeof pathOrErrNo === 'string') {
path = pathOrErrNo;
console.log ("node created path=%s", path);
} else {
throw new Error("ZooKeeper.create returned: " + pathOrErrNo);
}
context.path = path;
return zk_r.w_get (path, function (type, state, path_w) {
// Note: this is a watcher, and may be called multiple times
console.log ("watcher for path %s triggered", path_w);
deferred_watcher_triggered.resolve (path_w);
});
})
.then (function (stat_and_value) { // this is the response from w_get above
console.log ("get node: stat=%j, value=%j", stat_and_value[0], stat_and_value[1]);
deferred_watcher_ready.resolve (context.path);
return deferred_watcher_triggered;
})
.then (function () {
console.log ("zk_reader is finished");
process.nextTick( function () {
zk_r.close ();
});
});
//writer
var zk_w = new ZK();
zk_w.setLogger(true);
zk_w.init (zk_config);
zk_w.on_connected()
.then (function (zkk) {
console.log ("writer on_connected: zk=%j", zkk);
return deferred_watcher_ready;
})
.then(function (watched_path) {
console.log ("writer is invoking set on path %s", watched_path);
return zk_w.set (watched_path, "some other value", -1);
})
.then (function (stat) {
console.log ("set node result: stat=%j", stat);
console.log ("zk_writer is finished");
process.nextTick (function () {
zk_w.close ();
});
});