diff --git a/src/backup/head.js b/src/backup/head.js index c962141..5dc7692 100644 --- a/src/backup/head.js +++ b/src/backup/head.js @@ -245,9 +245,21 @@ function updateMaster(floID) { connectToMaster(); } +function reconstructAllActiveShares() { + if (_mode !== MASTER_MODE) + return console.debug("Not serving as master"); + console.debug("Reconstructing shares for all active IDs") + let group_list = keys.sink_groups.list; + group_list.forEach(g => { + //active ids also ignore ids that are in queue for reconstructing shares + let active_ids = keys.sink_chest.active_list(g); + active_ids.forEach(id => reconstructShares(g, id)); + }); +} + function reconstructShares(group, sinkID) { if (_mode !== MASTER_MODE) - return console.warn("Not serving as master"); + return console.warn(`Not serving as master, but reconstruct-shares is called for ${sinkID}(${group})`); keys.sink_chest.set_id(group, sinkID, null); collectAndCall(group, sinkID, sinkKey => sendSharesToNodes(sinkID, group, generateShares(sinkKey))); } @@ -460,6 +472,7 @@ function initProcess(app) { module.exports = { init: initProcess, collectAndCall, + reconstructAllActiveShares, sink: { generate: generateSink, reshare: reshareSink, diff --git a/src/keys.js b/src/keys.js index b1da64a..fa181de 100644 --- a/src/keys.js +++ b/src/keys.js @@ -345,6 +345,9 @@ const sink_groups = { get CONVERT() { return "convert" }, get BLOCKCHAIN_BONDS() { return "blockchain_bonds" }, get BOBS_FUND() { return "bobs_fund" }, + get list() { //total list + return [this.EXCHANGE, this.CONVERT, this.BLOCKCHAIN_BONDS, this.BOBS_FUND] + }, get initial_list() { //list to generate when starting exchange return [this.EXCHANGE, this.CONVERT] }, diff --git a/src/main.js b/src/main.js index 52eb260..15b6186 100644 --- a/src/main.js +++ b/src/main.js @@ -27,8 +27,10 @@ var app; function refreshData(startup = false) { return new Promise((resolve, reject) => { - refreshDataFromBlockchain().then(result => { - loadDataFromDB(result, startup).then(_ => { + refreshDataFromBlockchain().then(changes => { + loadDataFromDB(changes, startup).then(_ => { + if (!startup && changes.nodes) + backup.reconstructAllActiveShares(); app.refreshData(backup.nodeList); resolve("Data refresh successful") }).catch(error => reject(error))