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 21, 2015
2 parents f91016a + 7490d2f commit e7e68fc
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 20 deletions.
3 changes: 2 additions & 1 deletion lib/base_config.js
Expand Up @@ -84,7 +84,8 @@
store: 'cookie',
key: 'sid',
expiry: 14 * 24 * 60 * 60,
port: 4001
port: 4001,
createServer: true
}
// Key for when using Cookie session-store
, cookieSessionKey: 'sdata'
Expand Down
51 changes: 32 additions & 19 deletions lib/sessions/stores/level.js
Expand Up @@ -69,22 +69,15 @@ Level.prototype = new (function () {
var sessionsPath = path.join(process.cwd(), 'sessions');
var isMaster = geddy.config.workerNumber === 1;

// master cluster creates level db, while workers connect to it
if (isMaster) {
// first worker creates level db, while other workers connect to it
if (geddy.config.sessions.createServer && isMaster) {
// create level db
if (!fs.existsSync(sessionsPath)) {
file.mkdirP(sessionsPath);
fs.writeFileSync(path.join(sessionsPath, '.gitignore'), '*', 'utf8');
}
_db = level(path.join(sessionsPath, geddy.config.sessions.key), {encoding: 'json'});

// schedule session cleanup
if (geddy.config.sessions.expiry) {
setInterval(function() {
self._cleanup(geddy.config.sessions.expiry * 1000);
}, geddy.config.sessions.cleanupInterval || 1000 * 60);
}

// create multilevel server
net.createServer(function (con) {
con.pipe(multilevel.server(_db)).pipe(con);
Expand All @@ -98,16 +91,36 @@ Level.prototype = new (function () {
});
});
}
// there is already a session db running, connect to it
else {
// 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);
}
});
// we have to wait for the first worker to spin up the session server
if (geddy.config.sessions.createServer) {
process.addListener('message', function (data) {
if (data && data.method === 'broadcast' && data.action === 'sessionsServerReady') {
connect();
}
});
// an external session server is running, connect to it.
} else {
connect();
}
}

// first worker needs to cleanup sessions regulary
if (isMaster) {
// schedule session cleanup
if (geddy.config.sessions.expiry) {
setInterval(function() {
self._cleanup(geddy.config.sessions.expiry * 1000);
}, geddy.config.sessions.cleanupInterval || 1000 * 60);
}
}

function connect() {
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 All @@ -124,7 +137,7 @@ Level.prototype = new (function () {
data = result || {};
data = data.sessionData || {};
callback(data);
});
});
};

this.write = function (session, callback) {
Expand Down

0 comments on commit e7e68fc

Please sign in to comment.