dl
Version:
DreamLab Libs
100 lines (81 loc) • 3.42 kB
JavaScript
var Class = require("core").Class;
var CredentialsManager = require("../credentials/Manager.js").CredentialsManager;
var EventDispatcher = require("core").event.EventDispatcher;
var Event = require("core").event.Event;
var ErrorEvent = require("core").event.ErrorEvent;
//tutaj trzeba poprawic jak zrobimy pullr
var ZK = require("zookeeper").ZooKeeper;
var ZooKeeper = function () {
this.Extends = EventDispatcher;
/*
this._options = {};
this._retryCount = 0;
this._retryCountMax = 10;
this._cm = null;
this._zooHandle = null;
*/
this.initialize = function (options){
this.parent();
this._retryCount = 0;
this._retryCountMax = 10;
this._cm = null;
this._options = options;
var that = this;
this._cm = CredentialsManager.factory();
this._cm.addEventListener(CredentialsManager.Event.LOADED, this._options.credentialKey, function (data) {
var zoo = new ZK(), i, hosts = data.data.hosts, hostsList = hosts[0].host + ":" + hosts[0].port;
that._retryCount = 0;
zoo.on(ZK.on_closed, function () {
console.info("ZOOKEEPER: reconnecting");
that._reconnect();
});
zoo.on(ZK.on_connecting, function () {
console.warn("ZOOKEEPER: connection lost");
that._zooHandle = null;
zoo.close();
});
zoo.on(ZK.on_connected, function (zk) {
console.info("ZOOKEEPER: connected");
that._zooHandle = zk;
that.dispatchEvent(new Event(ZooKeeper.Event.READY, that._zooHandle));
});
for (i = 1, l = hosts.length; i < l; i++) {
hostsList += "," + hosts[i].host + ":" + hosts[i].port;
}
console.info("ZOOKEEPER: connecting to: %s", hostsList);
zoo.init({
connect: hostsList,
timeout: (that._options.timeout || 20000),
debug_level: 0, //ZK.ZOO_LOG_LEVEL_DEBUG,
hosts_order_deterministic: false,
data_as_buffer: false
});
});
this._cm.addEventListener(CredentialsManager.Event.ERROR, this._options.credentialKey, this._reconnect, this);
};
this.connect = function(){
var that = this;
console.log('ZOOKEEPER: getting credentials...');
this._cm.getCredential(this._options.credentialKey);
};
this._reconnect = function(){
this._retryCount++;
console.log('ZOOKEEPER: reconnecting: ' + this._retryCount);
if (this._retryCount > (this._options.retryCountMax || this._retryCountMax)) {
this._retryCount = 0;
this.dispatchEvent(new ErrorEvent(ZooKeeper.Event.ERROR));
return;
} else {
var that = this;
setTimeout(function () {
console.log('ZOOKEEPER: getting credentials...');
that._cm.renewCredential(that._options.credentialKey);
}, 1000);
}
};
};
ZooKeeper = new Class(new ZooKeeper());
ZooKeeper.Event = {};
ZooKeeper.Event.READY = "ZooKeeper.Event.READY";
ZooKeeper.Event.ERROR = "ZooKeeper.Event.ERROR";
exports.ZooKeeper = ZooKeeper;