From 55884220b40b221484d2cd510a361de151f5ae77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 23 Feb 2015 14:57:22 -0500 Subject: [PATCH] #2749 upgrade plugins:active to zset --- app.js | 2 +- src/install.js | 5 ++++- src/plugins.js | 5 ++--- src/plugins/install.js | 13 +++++++++++-- src/upgrade.js | 39 ++++++++++++++++++++++++++++++++++++++- 5 files changed, 56 insertions(+), 8 deletions(-) diff --git a/app.js b/app.js index dcdf8e1819..f208072719 100644 --- a/app.js +++ b/app.js @@ -323,7 +323,7 @@ function resetThemes(callback) { function resetPlugin(pluginId) { var db = require('./src/database'); - db.setRemove('plugins:active', pluginId, function(err) { + db.sortedSetRemove('plugins:active', pluginId, function(err) { if (err) { winston.error('[reset] Could not disable plugin: %s encountered error %s', pluginId, err.message); } else { diff --git a/src/install.js b/src/install.js index 10c4d25e05..d3df90b267 100644 --- a/src/install.js +++ b/src/install.js @@ -426,7 +426,10 @@ function enableDefaultPlugins(next) { 'nodebb-plugin-soundpack-default' ]; var db = require('./database'); - db.setAdd('plugins:active', defaultEnabled, next); + var order = defaultEnabled.map(function(plugin, index) { + return index; + }); + db.sortedSetAdd('plugins:active', order, defaultEnabled, next); } function setCopyrightWidget(next) { diff --git a/src/plugins.js b/src/plugins.js index eed2db94b8..091a54daa6 100644 --- a/src/plugins.js +++ b/src/plugins.js @@ -92,13 +92,12 @@ var fs = require('fs'), Plugins.clientScripts.length = 0; Plugins.libraryPaths.length = 0; - // Read the list of activated plugins and require their libraries async.waterfall([ function(next) { - db.getSetMembers('plugins:active', next); + db.getSortedSetRange('plugins:active', 0, -1, next); }, function(plugins, next) { - if (!plugins || !Array.isArray(plugins)) { + if (!Array.isArray(plugins)) { return next(); } diff --git a/src/plugins/install.js b/src/plugins/install.js index a95f16b3b1..06dcbbf659 100644 --- a/src/plugins/install.js +++ b/src/plugins/install.js @@ -38,7 +38,16 @@ module.exports = function(Plugins) { }, function(_isActive, next) { isActive = _isActive; - db[isActive ? 'setRemove' : 'setAdd']('plugins:active', id, next); + if (isActive) { + db.sortedSetRemove('plugins:active', id, next); + } else { + db.sortedSetCard('plugins:active', function(err, count) { + if (err) { + return next(err); + } + db.sortedSetAdd('plugins:active', count, id, next); + }); + } }, function(next) { meta.reloadRequired = true; @@ -119,6 +128,6 @@ module.exports = function(Plugins) { }; Plugins.isActive = function(id, callback) { - db.isSetMember('plugins:active', id, callback); + db.isSortedSetMember('plugins:active', id, callback); }; }; \ No newline at end of file diff --git a/src/upgrade.js b/src/upgrade.js index 117b79848e..05f8bd5fef 100644 --- a/src/upgrade.js +++ b/src/upgrade.js @@ -21,7 +21,7 @@ var db = require('./database'), schemaDate, thisSchemaDate, // IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema - latestSchema = Date.UTC(2015, 1, 17); + latestSchema = Date.UTC(2015, 1, 23); Upgrade.check = function(callback) { db.get('schemaDate', function(err, value) { @@ -859,6 +859,43 @@ Upgrade.upgrade = function(callback) { winston.info('[2015/02/17] renaming home.tpl to categories.tpl skipped'); next(); } + }, + function(next) { + thisSchemaDate = Date.UTC(2015, 1, 23); + if (schemaDate < thisSchemaDate) { + updatesMade = true; + winston.info('[2015/02/23] Upgrading plugins:active to sorted set'); + + db.getSetMembers('plugins:active', function(err, activePlugins) { + if (err) { + return next(err); + } + if (!Array.isArray(activePlugins) || !activePlugins.length) { + winston.info('[2015/02/23] Upgrading plugins:active to sorted set done'); + Upgrade.update(thisSchemaDate, next); + } + + db.delete('plugins:active', function(err) { + if (err) { + return next(err); + } + var order = -1; + async.eachSeries(activePlugins, function(plugin, next) { + ++order; + db.sortedSetAdd('plugins:active', order, plugin, next); + }, function(err) { + if (err) { + return next(err); + } + winston.info('[2015/02/23] Upgrading plugins:active to sorted set done'); + Upgrade.update(thisSchemaDate, next); + }); + }); + }); + } else { + winston.info('[2015/02/23] Upgrading plugins:active to sorted set skipped'); + next(); + } } // Add new schema updates here