self._client.create(ZK_CONFIG.leader_znode, zk.CreateMode.EPHEMERAL, function (error, path) { if (error) { if (error.code == zk.Exception.NODE_EXISTS) { // Oops too late return self.lookForLeader(); } else { return self.emiter.emit(Events.UNEXPECTED_ZK_ERROR, error); } } self.isLeader = true; self.emiter.emit(Events.GAINED_LEADERSHIP); });
_registerOwner(cb) { this._myName = _genRandomHexChars(12); const zkPath = `${OWNERS}/${this._myName}`; this._withRandomDelayIfTest( () => this._client.create( zkPath, null, zookeeper.ACL.OPEN_ACL_UNSAFE, zookeeper.CreateMode.EPHEMERAL, err => { if (err) { return cb(err); } this._log.debug('registered owner zk node', { zkPath: `${this._zkEndpoint}${zkPath}` }); return cb(null, zkPath); }) ); }
_registerLeader(cb) { // register in election queue const zkPath = `${LEADERS}${LEADER}`; this._withRandomDelayIfTest( () => this._client.create( zkPath, null, zookeeper.ACL.OPEN_ACL_UNSAFE, zookeeper.CreateMode.EPHEMERAL_SEQUENTIAL, (err, _path) => { if (err) { return cb(err); } this._myLeaderName = path.basename(_path); this._log.debug('registered leader zk node', { zkPath: `${this._zkEndpoint}${path}` }); return cb(); }) ); }
// @returns `Promise` _createNode() { const zk = this._zookeeper; const consumer = this._consumer; return new Promise((resolve, reject) => { zk.exists(consumer, (err, stat) => { if (err) { return reject(err); } if (stat) { return resolve(); } zk.create(consumer, _nodeZookeeperClient.CreateMode.EPHEMERAL, (err, node) => { // Skip node exists error for concurrency if (err && err.getCode() === _nodeZookeeperClient.Exception.NODE_EXISTS) { return resolve(); } if (err) { return reject(err); } resolve(); }); }); }); }
data, {}, NodeZookeeperClient.CreateMode.EPHEMERAL, err => { assert.ifError(err);
data, {}, NodeZookeeperClient.CreateMode.EPHEMERAL, err => { assert.ifError(err);
data, {}, NodeZookeeperClient.CreateMode.EPHEMERAL, err => { assert.ifError(err); data, {}, NodeZookeeperClient.CreateMode.EPHEMERAL, err => { assert.ifError(err);
data, {}, NodeZookeeperClient.CreateMode.EPHEMERAL, err => { assert.ifError(err);