more mongo and redis stuff

v1.18.x
Baris Soner Usakli 11 years ago
parent 53a7eab3e8
commit 2e2938616d

@ -154,6 +154,13 @@
}); });
} }
module.getObjects = function(keys, callback) {
db.collection('objects').find({_key:{$in:keys}}, {_id:0, _key:0}).toArray(function(err, data) {
callback(err, data);
});
}
module.getObjectField = function(key, field, callback) { module.getObjectField = function(key, field, callback) {
module.getObjectFields(key, [field], function(err, data) { module.getObjectFields(key, [field], function(err, data) {
if(err) { if(err) {

@ -170,6 +170,18 @@
redisClient.hgetall(key, callback); redisClient.hgetall(key, callback);
} }
module.getObjects = function(keys, callback) {
var multi = redisClient.multi();
for(var x=0; x<keys.length; ++x) {
multi.hgetall(keys[x]);
}
multi.exec(function (err, replies) {
callback(err, replies);
});
}
module.getObjectField = function(key, field, callback) { module.getObjectField = function(key, field, callback) {
module.getObjectFields(key, [field], function(err, data) { module.getObjectFields(key, [field], function(err, data) {
if(err) { if(err) {

@ -59,17 +59,15 @@ var async = require('async'),
}; };
function destroy(nid) { function destroy(nid) {
var multi = RDB.multi();
multi.del('notifications:' + nid);
multi.srem('notifications', nid);
multi.exec(function(err) { db.delete('notifications:' + nid, function(err, result) {
db.setRemove('notifications', nid, function(err, result) {
if (err) { if (err) {
winston.error('Problem deleting expired notifications. Stack follows.'); winston.error('Problem deleting expired notifications. Stack follows.');
winston.error(err.stack); winston.error(err.stack);
} }
}); });
});
} }
Notifications.push = function(nid, uids, callback) { Notifications.push = function(nid, uids, callback) {
@ -193,6 +191,11 @@ var async = require('async'),
}; };
Notifications.prune = function(cutoff) { Notifications.prune = function(cutoff) {
// TODO: this function wont work with dbal in its current state
// things to figure out
// 1 - RDB.keys mongo uses regex, redis uses global patterns?
// 2 - Need to remove the RDB.multi
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
winston.info('[notifications.prune] Removing expired notifications from the database.'); winston.info('[notifications.prune] Removing expired notifications from the database.');
} }

@ -364,15 +364,14 @@ var db = require('./database'),
} }
Posts.getPostsByPids = function(pids, callback) { Posts.getPostsByPids = function(pids, callback) {
var posts = [], var keys = [];
multi = RDB.multi();
for(var x=0, numPids=pids.length; x<numPids; x++) { for(var x=0, numPids=pids.length; x<numPids; x++) {
multi.hgetall("post:" + pids[x]); keys.push('post:' + pids[x]);
} }
multi.exec(function (err, replies) { db.getObjects(keys, function(err, data) {
async.map(replies, function(postData, _callback) { async.map(data, function(postData, _callback) {
if (postData) { if (postData) {
try { try {
@ -396,7 +395,7 @@ var db = require('./database'),
return callback(err, null); return callback(err, null);
} }
}); });
}) });
} }
Posts.getCidByPid = function(pid, callback) { Posts.getCidByPid = function(pid, callback) {

@ -107,6 +107,13 @@ var DebugRoute = function(app) {
}); });
} }
function getObjects(callback) {
db.getObjects(['testing1', 'testing2', 'retardation', 'user:1'], function(err, data) {
console.log('getObjects return ', data);
callback(err, {'getObjects':data});
});
}
function setObjectField(callback) { function setObjectField(callback) {
db.setObjectField(objectKey, 'reputation', 5, function(err, result) { db.setObjectField(objectKey, 'reputation', 5, function(err, result) {
console.log('setObjectField return', result); console.log('setObjectField return', result);
@ -302,7 +309,8 @@ var DebugRoute = function(app) {
getObjectValues, getObjectValues,
isObjectField, isObjectField,
incrObjectFieldBy, incrObjectFieldBy,
getObject getObject,
getObjects
]; ];
var sortedSetTasks = [ var sortedSetTasks = [
@ -342,7 +350,7 @@ var DebugRoute = function(app) {
isMemberOfSets isMemberOfSets
]; ];
require('async').series(listTasks, function(err, results) { require('async').series(objectTasks, function(err, results) {
if(err) { if(err) {
console.log(err); console.log(err);
res.send(err.message); res.send(err.message);

@ -168,14 +168,16 @@ var db = require('./database'),
topics.getTopicFields(tid, ['cid', 'lastposttime'], function(err, topicData) { topics.getTopicFields(tid, ['cid', 'lastposttime'], function(err, topicData) {
var oldCid = topicData.cid; var oldCid = topicData.cid;
var multi = RDB.multi();
multi.zrem('categories:' + oldCid + ':tid', tid); db.sortedSetRemove('categories:' + oldCid + ':tid', tid, function(err, result) {
multi.zadd('categories:' + cid + ':tid', topicData.lastposttime, tid); db.sortedSetAdd('categories:' + cid + ':tid', topicData.lastposttime, tid, function(err, result) {
multi.exec(function(err, result) { if(err) {
socket.emit('api:topic.move', {
if (!err && result[0] === 1 && result[1] === 1) { status: 'error'
});
return;
}
topics.setTopicField(tid, 'cid', cid); topics.setTopicField(tid, 'cid', cid);
@ -201,11 +203,7 @@ var db = require('./database'),
websockets.in('topic_' + tid).emit('event:topic_moved', { websockets.in('topic_' + tid).emit('event:topic_moved', {
tid: tid tid: tid
}); });
} else {
socket.emit('api:topic.move', {
status: 'error'
}); });
}
}); });
}); });
} }

@ -140,7 +140,6 @@ var path = require('path'),
app.use(express.bodyParser()); // Puts POST vars in request.body app.use(express.bodyParser()); // Puts POST vars in request.body
app.use(express.cookieParser()); // If you want to parse cookies (res.cookies) app.use(express.cookieParser()); // If you want to parse cookies (res.cookies)
// TODO : this uses redis
app.use(express.session({ app.use(express.session({
store: db.sessionStore, store: db.sessionStore,
secret: nconf.get('secret'), secret: nconf.get('secret'),

Loading…
Cancel
Save