Skip to content

Commit

Permalink
merged session-leveldb into master
Browse files Browse the repository at this point in the history
  • Loading branch information
der-On committed Apr 15, 2015
2 parents cb3efa3 + 2b82a58 commit f91016a
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 22 deletions.
6 changes: 6 additions & 0 deletions lib/cluster/master_dispatch.js
Expand Up @@ -55,6 +55,12 @@
}
}

, broadcast: function (msg) {
var self = this;
Object.keys(this.workers.items).forEach(function (workerId) {
self.workers.items[workerId].worker.send(msg);
});
}
};

module.exports = dispatch;
Expand Down
42 changes: 20 additions & 22 deletions lib/sessions/stores/level.js
Expand Up @@ -67,25 +67,10 @@ Level.prototype = new (function () {
this.setup = function (callback) {
var con;
var sessionsPath = path.join(process.cwd(), 'sessions');
var lockfile = path.join(sessionsPath, geddy.config.sessions.key, 'LOCK');

var locked = false;
var fh;

if (fs.existsSync(lockfile)) {
try {
fh = fs.openSync(lockfile, 'w');
} catch (e) {
locked = true;
}

if (fh) {
fs.closeSync(fh);
}
}
var isMaster = geddy.config.workerNumber === 1;

// master cluster creates level db, while workers connect to it
if (!locked) {
if (isMaster) {
// create level db
if (!fs.existsSync(sessionsPath)) {
file.mkdirP(sessionsPath);
Expand All @@ -103,13 +88,26 @@ Level.prototype = new (function () {
// create multilevel server
net.createServer(function (con) {
con.pipe(multilevel.server(_db)).pipe(con);
}).listen(geddy.config.sessions.port);
geddy.log.info('Sessions DB listening on port ' + geddy.config.sessions.port);
}).listen(geddy.config.sessions.port, function () {
geddy.log.info('Sessions DB server listening on port ' + geddy.config.sessions.port);
// inform all clients that server is ready
geddy.worker.sendMessage({
workerId: process.pid,
method: 'broadcast',
action: 'sessionsServerReady'
});
});
}
else {
_db = multilevel.client();
var con = net.connect(geddy.config.sessions.port);
con.pipe(_db.createRpcStream()).pipe(con);
// let the server spin up first
process.addListener('message', function (data) {
if (data && data.method === 'broadcast' && data.action === 'sessionsServerReady') {
geddy.log.info('Sessions DB client connecting on port ' + geddy.config.sessions.port);
_db = multilevel.client();
var con = net.connect(geddy.config.sessions.port);
con.pipe(_db.createRpcStream()).pipe(con);
}
});
}

callback();
Expand Down

0 comments on commit f91016a

Please sign in to comment.