log: improve error messages in compact()

This commit is contained in:
Andre Staltz 2023-11-23 17:02:32 +02:00
parent 29badc9fd8
commit dd492553be
No known key found for this signature in database
GPG Key ID: 9EDE23EA7E8A4890
1 changed files with 15 additions and 8 deletions

View File

@ -712,7 +712,10 @@ function Log(filename, opts) {
} }
await p(onDrain)() await p(onDrain)()
const [err1] = await p(onOverwritesFlushed)() const [err1] = await p(onOverwritesFlushed)()
if (err1) return cb(err1) if (err1) {
// prettier-ignore
return cb(new Error('Compact failed to pre-flush overwrites', { cause: err1 }))
}
const startCompactTimestamp = Date.now() const startCompactTimestamp = Date.now()
compacting = true compacting = true
@ -724,7 +727,7 @@ function Log(filename, opts) {
const [err2] = await p(fs.unlink.bind(fs))(filenameNew) const [err2] = await p(fs.unlink.bind(fs))(filenameNew)
if (err2 && err2.code !== 'ENOENT') { if (err2 && err2.code !== 'ENOENT') {
// prettier-ignore // prettier-ignore
return cb(new Error('Failed to get rid of previous compaction file when starting a new compact', {cause: err2})) return cb(new Error('Compact failed to get rid of previous compacting log', { cause: err2 }))
} }
const rafNew = RAF(filenameNew) const rafNew = RAF(filenameNew)
@ -808,7 +811,8 @@ function Log(filename, opts) {
if (err3) { if (err3) {
await p(rafNew.close.bind(rafNew))() await p(rafNew.close.bind(rafNew))()
compacting = false compacting = false
return cb(err3) // prettier-ignore
return cb(new Error('Compact failed while scanning-sifting the old log', { cause: err3 }))
} }
await writeBlock(latestBlockIndexNew, latestBlockBufNew) await writeBlock(latestBlockIndexNew, latestBlockBufNew)
@ -819,12 +823,14 @@ function Log(filename, opts) {
]) ])
if (err4 ?? err5) { if (err4 ?? err5) {
compacting = false compacting = false
return cb(err4 ?? err5) // prettier-ignore
return cb(new Error('Compact failed to close log files', { cause: err4 ?? err5 }))
} }
const [err6] = await p(fs.rename.bind(fs))(filenameNew, filename) const [err6] = await p(fs.rename.bind(fs))(filenameNew, filename)
if (err6) { if (err6) {
compacting = false compacting = false
return cb(err6) // prettier-ignore
return cb(new Error('Compact failed to replace old log with new', { cause: err6 }))
} }
raf = RAF(filename) raf = RAF(filename)
latestBlockBuf = latestBlockBufNew latestBlockBuf = latestBlockBufNew
@ -838,9 +844,10 @@ function Log(filename, opts) {
const duration = Date.now() - startCompactTimestamp const duration = Date.now() - startCompactTimestamp
debug2('Completed in %d ms', duration) debug2('Completed in %d ms', duration)
deletedBytes = 0 deletedBytes = 0
saveStats(function onSavedStatsAfterCompaction(err) { const [err7] = await p(saveStats)()
if (err) debug2('Failed to save stats file: %s', err.message) if (err7) {
}) return cb(new Error('Compact failed to save stats file', { cause: err7 }))
}
compactionProgress.set({ percent: 1, done: true, sizeDiff, holesFound }) compactionProgress.set({ percent: 1, done: true, sizeDiff, holesFound })
for (const callback of waitingCompaction) callback() for (const callback of waitingCompaction) callback()
waitingCompaction.length = 0 waitingCompaction.length = 0