updated schema handling so that nodebb won't run unless you are up to date -- fixed #498

v1.18.x
Julian Lam 12 years ago
parent 411ba3542c
commit 79c52dfe84

@ -88,8 +88,11 @@
websockets = require('./src/websockets.js'), websockets = require('./src/websockets.js'),
posts = require('./src/posts.js'), posts = require('./src/posts.js'),
plugins = require('./src/plugins'), // Don't remove this - plugins initializes itself plugins = require('./src/plugins'), // Don't remove this - plugins initializes itself
Notifications = require('./src/notifications'); Notifications = require('./src/notifications'),
Upgrade = require('./src/upgrade');
Upgrade.check(function(schema_ok) {
if (schema_ok || nconf.get('check-schema') === false) {
websockets.init(SocketIO); websockets.init(SocketIO);
global.templates = {}; global.templates = {};
@ -112,6 +115,14 @@
templates.ready(webserver.init); templates.ready(webserver.init);
Notifications.init(); Notifications.init();
} else {
winston.warn('Your NodeBB schema is out-of-date. Please run the following command to bring your dataset up to spec:');
winston.warn(' node app --upgrade');
winston.warn('To ignore this error (not recommended):');
winston.warn(' node app --no-check-schema')
process.exit();
}
});
}); });
} else if (nconf.get('setup') || !fs.existsSync(__dirname + '/config.json')) { } else if (nconf.get('setup') || !fs.existsSync(__dirname + '/config.json')) {
// New install, ask setup questions // New install, ask setup questions

@ -1,16 +1,38 @@
"use strict";
var RDB = require('./redis.js'), var RDB = require('./redis.js'),
async = require('async'), async = require('async'),
winston = require('winston'), winston = require('winston'),
notifications = require('./notifications') notifications = require('./notifications'),
Upgrade = {}; Upgrade = {},
schemaDate, thisSchemaDate;
Upgrade.check = function(callback) {
var latestSchema = new Date(2013, 10, 11).getTime();
RDB.get('schemaDate', function(err, value) {
if (parseInt(value, 10) > latestSchema) {
callback(true);
} else {
callback(false);
}
});
};
Upgrade.upgrade = function() { Upgrade.upgrade = function() {
winston.info('Beginning Redis database schema update'); winston.info('Beginning Redis database schema update');
async.series([ async.series([
function(next) { function(next) {
RDB.hget('notifications:1', 'score', function(err, score) { RDB.get('schemaDate', function(err, value) {
if (score) { schemaDate = value;
next();
});
},
function(next) {
thisSchemaDate = new Date(2013, 9, 3).getTime();
if (schemaDate < thisSchemaDate) {
async.series([ async.series([
function(next) { function(next) {
RDB.keys('uid:*:notifications:flag', function(err, keys) { RDB.keys('uid:*:notifications:flag', function(err, keys) {
@ -44,7 +66,10 @@ Upgrade.upgrade = function() {
if (keys.length > 0) { if (keys.length > 0) {
winston.info('[2013/10/03] Removing Notification Scores'); winston.info('[2013/10/03] Removing Notification Scores');
async.each(keys, function(key, next) { async.each(keys, function(key, next) {
if (key === 'notifications:next_nid') return next(); if (key === 'notifications:next_nid') {
return next();
}
RDB.hdel(key, 'score', next); RDB.hdel(key, 'score', next);
}, next); }, next);
} else { } else {
@ -58,11 +83,10 @@ Upgrade.upgrade = function() {
winston.info('[2013/10/03] Updates to Notifications skipped.'); winston.info('[2013/10/03] Updates to Notifications skipped.');
next(); next();
} }
});
}, },
function(next) { function(next) {
RDB.exists('notifications', function(err, exists) { thisSchemaDate = new Date(2013, 9, 23).getTime();
if (!exists) { if (schemaDate < thisSchemaDate) {
RDB.keys('notifications:*', function(err, keys) { RDB.keys('notifications:*', function(err, keys) {
var multi = RDB.multi(); var multi = RDB.multi();
@ -83,11 +107,10 @@ Upgrade.upgrade = function() {
winston.info('[2013/10/23] Updates to Notifications skipped.'); winston.info('[2013/10/23] Updates to Notifications skipped.');
next(); next();
} }
});
}, },
function(next) { function(next) {
RDB.hget('config', 'postDelay', function(err, postDelay) { thisSchemaDate = new Date(2013, 10, 11).getTime();
if(parseInt(postDelay, 10) > 150) { if (schemaDate < thisSchemaDate) {
RDB.hset('config', 'postDelay', 10, function(err, success) { RDB.hset('config', 'postDelay', 10, function(err, success) {
winston.info('[2013/11/11] Updated postDelay to 10 seconds.'); winston.info('[2013/11/11] Updated postDelay to 10 seconds.');
next(); next();
@ -96,15 +119,21 @@ Upgrade.upgrade = function() {
winston.info('[2013/11/11] Update to postDelay skipped.'); winston.info('[2013/11/11] Update to postDelay skipped.');
next(); next();
} }
});
} }
// Add new schema updates here // Add new schema updates here
// IMPORTANT: REMEMBER TO UPDATE VALUE OF latestSchema IN LINE 12!!!
], function(err) { ], function(err) {
if (!err) { if (!err) {
winston.info('Redis schema update complete!'); RDB.set('schemaDate', thisSchemaDate, function(err) {
if (!err) {
winston.info('[upgrade] Redis schema update complete!');
process.exit(); process.exit();
} else { } else {
winston.error('Errors were encountered while updating the NodeBB schema: ' + err.message); winston.error('[upgrade] Could not update NodeBB schema date!');
}
});
} else {
winston.error('[upgrade] Errors were encountered while updating the NodeBB schema: ' + err.message);
} }
}); });
}; };

Loading…
Cancel
Save