From 94921b53fddb7a71a1ed685eed38e249a5727da7 Mon Sep 17 00:00:00 2001 From: John McLear Date: Fri, 8 May 2020 20:17:31 +0000 Subject: [PATCH] migrateDirtyDBtoRealDB: fix the script not trusting length, and directly iterating on dirtyDB tuples Fixes #2214. --- bin/migrateDirtyDBtoRealDB.js | 36 ++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/bin/migrateDirtyDBtoRealDB.js b/bin/migrateDirtyDBtoRealDB.js index 4db869216..ba329aa34 100644 --- a/bin/migrateDirtyDBtoRealDB.js +++ b/bin/migrateDirtyDBtoRealDB.js @@ -11,7 +11,7 @@ require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) { var settings = require("ep_etherpad-lite/node/utils/Settings"); - var dirty = require("../src/node_modules/dirty")('var/dirty.db'); + var dirty = require("../src/node_modules/dirty"); var ueberDB = require("../src/node_modules/ueberdb2"); var log4js = require("../src/node_modules/log4js"); var dbWrapperSettings = { @@ -19,25 +19,31 @@ require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) { "writeInterval": 0 // Write directly to the database, don't buffer }; var db = new ueberDB.database(settings.dbType, settings.dbSettings, dbWrapperSettings, log4js.getLogger("ueberDB")); + var i = 0; + var length = 0; db.init(function() { console.log("Waiting for dirtyDB to parse its file."); - dirty.on("load", function(length) { - console.log("Loaded " + length + " records, processing now."); - var remaining = length; - dirty.forEach(function(key, value) { - db.set(key, value, function(error) { - if (typeof error != 'undefined') { - console.log("Unexpected result handling: ", key, value, " was: ", error); - } - remaining -= 1; - var oldremaining = remaining; - if ((oldremaining % 100) == 0) { - console.log("Records not yet flushed to database: ", remaining); - } - }); + dirty = dirty('var/dirty.db').on("load", function() { + dirty.forEach(function(){ + length++; + }); + console.log(`Found ${length} records, processing now.`); + + dirty.forEach(async function(key, value) { + let error = await db.set(key, value); + console.log(`Wrote record ${i}`); + i++; + + if (i === length) { + console.log("finished, just clearing up for a bit..."); + setTimeout(function() { + process.exit(0); + }, 5000); + } }); console.log("Please wait for all records to flush to database, then kill this process."); }); + console.log("done?") }); });