From 1e44ca3a0fbd2d4a1a0ea341f5624cdda40f414c Mon Sep 17 00:00:00 2001 From: Baris Soner Usakli Date: Fri, 14 Feb 2014 14:03:54 -0500 Subject: [PATCH] upgrade topics:tid to sorted set, topics:recent doesnt have deleted topics --- src/database/mongo.js | 6 ++++++ src/database/redis.js | 6 ++++++ src/threadTools.js | 2 +- src/topics.js | 8 ++++---- src/upgrade.js | 38 ++++++++++++++++++++++++++++++++++++-- 5 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/database/mongo.js b/src/database/mongo.js index 66b37c8ce0..e3a5d3529c 100644 --- a/src/database/mongo.js +++ b/src/database/mongo.js @@ -684,6 +684,12 @@ }); } + module.isSortedSetMember = function(key, value, callback) { + module.sortedSetScore(key, value, function(err, score) { + callback(err, !!score); + }); + } + module.sortedSetsScore = function(keys, value, callback) { if(value !== null && value !== undefined) { value = value.toString(); diff --git a/src/database/redis.js b/src/database/redis.js index 2eeddb7943..0c90128939 100644 --- a/src/database/redis.js +++ b/src/database/redis.js @@ -378,6 +378,12 @@ redisClient.zscore(key, value, callback); } + module.isSortedSetMember = function(key, value, callback) { + module.sortedSetScore(key, value, function(err, score) { + callback(err, !!score); + }); + } + module.sortedSetsScore = function(keys, value, callback) { var multi = redisClient.multi(); diff --git a/src/threadTools.js b/src/threadTools.js index fa34bef729..cd3b770e32 100644 --- a/src/threadTools.js +++ b/src/threadTools.js @@ -18,7 +18,7 @@ var winston = require('winston'), ThreadTools.exists = function(tid, callback) { - db.isSetMember('topics:tid', tid, function(err, ismember) { + db.isSortedSetMember('topics:tid', tid, function(err, ismember) { if (err) { callback(false); diff --git a/src/topics.js b/src/topics.js index 7d5d0f7441..acc76529a0 100644 --- a/src/topics.js +++ b/src/topics.js @@ -47,7 +47,7 @@ var async = require('async'), return callback(err); } - db.setAdd('topics:tid', tid); + db.sortedSetAdd('topics:tid', timestamp, tid); db.searchIndex('topic', title, tid); user.addTopicIdToUser(uid, tid, timestamp); @@ -906,7 +906,7 @@ var async = require('async'), }; Topics.getAllTopics = function(start, end, callback) { - db.getSortedSetRevRange('topics:recent', start, end, function(err, tids) { + db.getSortedSetRevRange('topics:tid', start, end, function(err, tids) { if(err) { return callback(err); } @@ -918,7 +918,7 @@ var async = require('async'), }; Topics.markAllRead = function(uid, callback) { - db.getSetMembers('topics:tid', function(err, tids) { + db.getSortedSetRange('topics:tid', 0, -1, function(err, tids) { if (err) { return callback(err); } @@ -1189,7 +1189,7 @@ var async = require('async'), } Topics.reIndexAll = function(callback) { - db.getSetMembers('topics:tid', function(err, tids) { + db.getSortedSetRange('topics:tid', 0, -1, function(err, tids) { if (err) { return callback(err); } diff --git a/src/upgrade.js b/src/upgrade.js index 40057dc348..2f684179a0 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -19,7 +19,7 @@ var db = require('./database'), Upgrade.check = function(callback) { // IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema - var latestSchema = new Date(2014, 1, 9, 20, 50).getTime(); + var latestSchema = new Date(2014, 1, 14, 20, 50).getTime(); db.get('schemaDate', function(err, value) { if (parseInt(value, 10) >= latestSchema) { @@ -579,7 +579,41 @@ Upgrade.upgrade = function(callback) { winston.info('[2014/2/9] Remove Topic LastFeedUpdate value, as feeds are now on-demand - skipped'); next(); } - } + }, + function(next) { + thisSchemaDate = new Date(2014, 1, 14, 20, 50).getTime(); + + if (schemaDate < thisSchemaDate) { + updatesMade = true; + + db.getSetMembers('topics:tid', function(err, tids) { + if(err) { + return next(err); + } + + db.delete('topics:tid', function(err) { + if(err) { + return next(err); + } + + async.each(tids, function(tid, next) { + Topics.getTopicField(tid, 'timestamp', function(err, timestamp) { + db.sortedSetAdd('topics:tid', timestamp, tid, next); + }); + }, function(err) { + if(err) { + return next(err); + } + winston.info('[2014/2/14] Upgraded topics to sorted set'); + next(); + }) + }); + }) + } else { + winston.info('[2014/2/14] Upgrade topics to sorted set - skipped'); + next(); + } + }, // Add new schema updates here // IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema IN LINE 17!!! ], function(err) {