From 9466d7ced4a47b4f489fbb7f63ec27338d91c516 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 11 Sep 2014 17:16:28 -0400 Subject: [PATCH] faster notif prune no need to loop tru and check datetime since notifications is a sorted set now --- src/notifications.js | 58 +++++++++++++++++--------------------------- 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/src/notifications.js b/src/notifications.js index c945331f68..328e033502 100644 --- a/src/notifications.js +++ b/src/notifications.js @@ -228,54 +228,40 @@ var async = require('async'), var cutoffTime = Date.now() - week; - db.getSortedSetRange('notifications', 0, 499, function(err, nids) { + db.getSortedSetRangeByScore('notifications', 0, 500, 0, cutoffTime, function(err, nids) { if (err) { return winston.error(err.message); } + if (!Array.isArray(nids) || !nids.length) { - events.log('No notifications to prune'); - return; + return events.log('No notifications to prune'); } - var keys = nids.map(function(nid) { + var keys = nids.map(function(nid) { return 'notifications:' + nid; }); - db.getObjectsFields(keys, ['nid', 'datetime'], function(err, notifs) { - if (err) { - return winston.error(err.message); - } - - var expiredNids = nids.filter(function(nid, index) { - return !notifs[index].nid || parseInt(notifs[index].datetime, 10) < cutoffTime; - }).filter(Boolean); - - keys = expiredNids.map(function(nid) { - return 'notifications:' + nid; - }); + numPruned = nids.length; - numPruned = expiredNids.length; + events.log('Notification pruning. Expired Nids = ' + numPruned); - events.log('Notification pruning. Expired Nids = ' + numPruned); - - async.parallel([ - function(next) { - db.sortedSetRemove('notifications', expiredNids, next); - }, - function(next) { - db.deleteAll(keys, next); - } - ], function(err) { - if (err) { - return winston.error('Encountered error pruning notifications: ' + err.message); - } + async.parallel([ + function(next) { + db.sortedSetRemove('notifications', nids, next); + }, + function(next) { + db.deleteAll(keys, next); + } + ], function(err) { + if (err) { + return winston.error('Encountered error pruning notifications: ' + err.message); + } - if (process.env.NODE_ENV === 'development') { - winston.info('[notifications.prune] Notification pruning completed. ' + numPruned + ' expired notification' + (numPruned !== 1 ? 's' : '') + ' removed.'); - } - var diff = process.hrtime(start); - events.log('Pruning '+ numPruned + ' notifications took : ' + (diff[0] * 1e3 + diff[1] / 1e6) + ' ms'); - }); + if (process.env.NODE_ENV === 'development') { + winston.info('[notifications.prune] Notification pruning completed. ' + numPruned + ' expired notification' + (numPruned !== 1 ? 's' : '') + ' removed.'); + } + var diff = process.hrtime(start); + events.log('Pruning '+ numPruned + ' notifications took : ' + (diff[0] * 1e3 + diff[1] / 1e6) + ' ms'); }); }); };