From 198b4be8e9295b17f7f1d60895958169a6ab396f Mon Sep 17 00:00:00 2001 From: Andre Staltz Date: Thu, 18 Jan 2024 16:52:00 +0200 Subject: [PATCH] cleanup is only done after all tasks have settled --- lib/index.js | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/lib/index.js b/lib/index.js index f326459..f50521f 100644 --- a/lib/index.js +++ b/lib/index.js @@ -42,29 +42,45 @@ function initGC(peer, config) { const startTime = Date.now() const done = multicb({ pluck: 1 }) + function makeRecCB(/**@type {string}*/ errorMessage) { + const cb = done() + return (/**@type {Error=}*/ err) => { + if (err) debug('%s: %s', errorMessage, err.message ?? err) + cb() + } + } + let waiting = false for (const rec of peer.db.records()) { if (!rec.msg) continue const { id: msgID, msg } = rec const [purpose, details] = peer.goals.getMsgPurpose(msgID, msg) + if (purpose === 'goal') continue // don't cleanup if (purpose === 'none') { - peer.db.del(msgID, done()) + const recCB = makeRecCB('Failed to delete msg when cleaning up') + peer.db.del(msgID, recCB) waiting = true } else if (purpose === 'ghost') { const { tangleID, span } = details - const cb = done() + const recCB = makeRecCB('Failed to delete ghost msg when cleaning up') // TODO: Could one msg be a ghostable in MANY tangles? Or just one? peer.db.ghosts.add({ tangleID, msgID, span }, (err) => { - // prettier-ignore - if (err) return cb(new Error('gc failed to add ghost', { cause: err })) - peer.db.del(msgID, cb) + if (err) return recCB(err) + peer.db.del(msgID, recCB) }) waiting = true } else if (purpose === 'trail') { - peer.db.erase(msgID, done()) + const recCB = makeRecCB('Failed to erase trail msg when cleaning up') + peer.db.erase(msgID, recCB) waiting = true + } else { + cb(new Error('Unreachable')) } } + + if (waiting) done(whenEnded) + else whenEnded() + /** @param {Error=} err */ function whenEnded(err) { const duration = Date.now() - startTime @@ -72,8 +88,6 @@ function initGC(peer, config) { else debug('Cleanup completed in %sms', duration) cb() } - if (waiting) done(whenEnded) - else whenEnded() } /**