speed up category purge

using eachLimit
dont emit stats on every topic delete
This commit is contained in:
barisusakli
2014-06-21 22:11:44 -04:00
parent dceeed22f7
commit a4d4e53f45
6 changed files with 53 additions and 38 deletions

View File

@@ -59,7 +59,7 @@ SocketTopics.postcount = function(socket, tid, callback) {
SocketTopics.increaseViewCount = function(socket, tid) {
topics.increaseViewCount(tid);
}
};
SocketTopics.markAsRead = function(socket, tid) {
if(!tid || !socket.uid) {
@@ -152,40 +152,50 @@ SocketTopics.markAsUnreadForAll = function(socket, tids, callback) {
}, callback);
};
SocketTopics.delete = function(socket, tids, callback) {
doTopicAction('delete', socket, tids, callback);
SocketTopics.delete = function(socket, data, callback) {
doTopicAction('delete', socket, data, callback);
};
SocketTopics.restore = function(socket, tids, callback) {
doTopicAction('restore', socket, tids, callback);
SocketTopics.restore = function(socket, data, callback) {
doTopicAction('restore', socket, data, callback);
};
SocketTopics.purge = function(socket, tids, callback) {
doTopicAction('purge', socket, tids, callback);
SocketTopics.purge = function(socket, data, callback) {
doTopicAction('purge', socket, data, function(err) {
if (err) {
return callback(err);
}
websockets.emitTopicPostStats();
websockets.in('category_' + data.cid).emit('event:topic_purged', data.tids);
async.each(data.tids, function(tid, next) {
websockets.in('topic_' + tid).emit('event:topic_purged', tid);
next();
}, callback);
});
};
SocketTopics.lock = function(socket, tids, callback) {
doTopicAction('lock', socket, tids, callback);
SocketTopics.lock = function(socket, data, callback) {
doTopicAction('lock', socket, data, callback);
};
SocketTopics.unlock = function(socket, tids, callback) {
doTopicAction('unlock', socket, tids, callback);
SocketTopics.unlock = function(socket, data, callback) {
doTopicAction('unlock', socket, data, callback);
};
SocketTopics.pin = function(socket, tids, callback) {
doTopicAction('pin', socket, tids, callback);
SocketTopics.pin = function(socket, data, callback) {
doTopicAction('pin', socket, data, callback);
};
SocketTopics.unpin = function(socket, tids, callback) {
doTopicAction('unpin', socket, tids, callback);
SocketTopics.unpin = function(socket, data, callback) {
doTopicAction('unpin', socket, data, callback);
};
function doTopicAction(action, socket, tids, callback) {
if(!tids) {
function doTopicAction(action, socket, data, callback) {
if(!data || !Array.isArray(data.tids) || !data.cid) {
return callback(new Error('[[error:invalid-tid]]'));
}
async.each(tids, function(tid, next) {
async.each(data.tids, function(tid, next) {
privileges.topics.canEdit(tid, socket.uid, function(err, canEdit) {
if(err) {
return next(err);