mirror of https://codeberg.org/pzp/pzp-gc.git
cleanup is only done after all tasks have settled
This commit is contained in:
parent
2809d7bb50
commit
198b4be8e9
30
lib/index.js
30
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()
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue