From f2808ee764add6f15c24effc3fa816ae8cd36e0c Mon Sep 17 00:00:00 2001 From: Sacha Greif Date: Fri, 22 Aug 2014 11:25:05 +0900 Subject: [PATCH] rerun interrupted migrations --- History.md | 1 + server/migrations.js | 37 ++++++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/History.md b/History.md index 5f98b5a8a..44288cbe7 100644 --- a/History.md +++ b/History.md @@ -6,6 +6,7 @@ * Notifications is now a nav menu item. * Renamed `comments` to `commentsCount` on `Post` model. * Now tracking list of commenters `_id`s on `Post` model. +* Rerun interrupted migrations. ## v0.9.2.5 “AccountScope” diff --git a/server/migrations.js b/server/migrations.js index 592c8852c..ccc49875e 100644 --- a/server/migrations.js +++ b/server/migrations.js @@ -13,21 +13,32 @@ Meteor.startup(function () { // wrapper function for all migrations var runMigration = function (migrationName) { - // migration updatePostStatus: make sure posts have a status - if (!Migrations.findOne({name: migrationName})) { - console.log("//----------------------------------------------------------------------//"); - console.log("//------------// Starting "+migrationName+" Migration //-----------//"); - console.log("//----------------------------------------------------------------------//"); - Migrations.insert({name: migrationName, startedAt: new Date(), completed: false}); + var migration = Migrations.findOne({name: migrationName}); - // execute migration function - var itemsAffected = migrationsList[migrationName]() || 0; - - Migrations.update({name: migrationName}, {$set: {finishedAt: new Date(), completed: true, itemsAffected: itemsAffected}}); - console.log("//----------------------------------------------------------------------//"); - console.log("//------------// Ending "+migrationName+" Migration //-----------//"); - console.log("//----------------------------------------------------------------------//"); + if (migration){ + if(typeof migration.finishedAt === 'undefined'){ + // if migration exists but hasn't finished, remove it and start fresh + console.log('!!! Found incomplete migration "'+migrationName+'", removing and running again.') + Migrations.remove({name: migrationName}); + }else{ + // do nothing + // console.log('Migration "'+migrationName+'" already exists, doing nothing.') + return + } } + + console.log("//----------------------------------------------------------------------//"); + console.log("//------------// Starting "+migrationName+" Migration //-----------//"); + console.log("//----------------------------------------------------------------------//"); + Migrations.insert({name: migrationName, startedAt: new Date(), completed: false}); + + // execute migration function + var itemsAffected = migrationsList[migrationName]() || 0; + + Migrations.update({name: migrationName}, {$set: {finishedAt: new Date(), completed: true, itemsAffected: itemsAffected}}); + console.log("//----------------------------------------------------------------------//"); + console.log("//------------// Ending "+migrationName+" Migration //-----------//"); + console.log("//----------------------------------------------------------------------//"); } var migrationsList = {