diff --git a/@xen-orchestra/backups/_cleanVm.js b/@xen-orchestra/backups/_cleanVm.js index d6355087c..bd4dd762c 100644 --- a/@xen-orchestra/backups/_cleanVm.js +++ b/@xen-orchestra/backups/_cleanVm.js @@ -55,12 +55,17 @@ async function mergeVhdChain(chain, { handler, logInfo, remove, merge }) { const children = chainCopy if (merge) { - logInfo(`merging children into parent`, { childrenCount: children.length, parent }) + logInfo('will merge children into parent', { children, parent }) let done, total const handle = setInterval(() => { if (done !== undefined) { - logInfo(`merging children in progress`, { children, parent, doneCount: done, totalCount: total }) + logInfo('merge in progress', { + done, + parent, + progress: Math.round((100 * done) / total), + total, + }) } }, 10e3) @@ -122,15 +127,15 @@ async function checkAliases( { handler, logInfo = noop, logWarn = console.warn, remove = false } ) { const aliasFound = [] - for (const path of aliasPaths) { - const target = await resolveVhdAlias(handler, path) + for (const alias of aliasPaths) { + const target = await resolveVhdAlias(handler, alias) if (!isVhdFile(target)) { - logWarn('alias references non VHD target', { path, target }) + logWarn('alias references non VHD target', { alias, target }) if (remove) { - logInfo('removing alias and non VHD target', { path, target }) + logInfo('removing alias and non VHD target', { alias, target }) await handler.unlink(target) - await handler.unlink(path) + await handler.unlink(alias) } continue } @@ -143,13 +148,13 @@ async function checkAliases( // error during dispose should not trigger a deletion } } catch (error) { - logWarn('missing or broken alias target', { target, path, error }) + logWarn('missing or broken alias target', { alias, target, error }) if (remove) { try { - await VhdAbstract.unlink(handler, path) + await VhdAbstract.unlink(handler, alias) } catch (error) { if (error.code !== 'ENOENT') { - logWarn('error deleting alias target', { target, path, error }) + logWarn('error deleting alias target', { alias, target, error }) } } } @@ -159,17 +164,17 @@ async function checkAliases( aliasFound.push(resolve('/', target)) } - const entries = await handler.list(targetDataRepository, { + const vhds = await handler.list(targetDataRepository, { ignoreMissing: true, prependDir: true, }) - entries.forEach(async entry => { - if (!aliasFound.includes(entry)) { - logWarn('no alias references VHD', { entry }) + vhds.forEach(async path => { + if (!aliasFound.includes(path)) { + logWarn('no alias references VHD', { path }) if (remove) { - logInfo('deleting unaliased VHD') - await VhdAbstract.unlink(handler, entry) + logInfo('deleting unused VHD', { path }) + await VhdAbstract.unlink(handler, path) } } }) @@ -225,7 +230,7 @@ exports.cleanVm = async function cleanVm( logWarn(`should delete ${duplicate._path}`) vhds.delete(duplicate._path) } else { - logWarn(`same ids but different content`) + logWarn('same ids but different content') } } else { logInfo('not duplicate', UUID.stringify(vhd.footer.uuid), path) @@ -236,7 +241,7 @@ exports.cleanVm = async function cleanVm( vhds.delete(path) logWarn('VHD check error', { path, error }) if (error?.code === 'ERR_ASSERTION' && remove) { - logInfo('deleting broken path', { path }) + logInfo('deleting broken VHD', { path }) return VhdAbstract.unlink(handler, path) } } @@ -284,9 +289,9 @@ exports.cleanVm = async function cleanVm( if (!vhds.has(parent)) { vhds.delete(vhdPath) - logWarn('parent VHD is missing', { parent, vhdPath }) + logWarn('parent VHD is missing', { parent, child: vhdPath }) if (remove) { - logInfo('deleting orphan VHD', { vhdPath }) + logInfo('deleting orphan VHD', { path: vhdPath }) deletions.push(VhdAbstract.unlink(handler, vhdPath)) } } @@ -337,7 +342,7 @@ exports.cleanVm = async function cleanVm( try { metadata = JSON.parse(await handler.readFile(json)) } catch (error) { - logWarn('failed to read metadata file', { json, error }) + logWarn('failed to read backup metadata', { path: json, error }) jsons.delete(json) return } @@ -348,9 +353,9 @@ exports.cleanVm = async function cleanVm( if (xvas.has(linkedXva)) { unusedXvas.delete(linkedXva) } else { - logWarn('metadata XVA is missing', { json }) + logWarn('the XVA linked to the backup is missing', { backup: json, xva: linkedXva }) if (remove) { - logInfo('deleting incomplete backup', { json }) + logInfo('deleting incomplete backup', { path: json }) jsons.delete(json) await handler.unlink(json) } @@ -371,9 +376,9 @@ exports.cleanVm = async function cleanVm( vhdsToJSons[path] = json }) } else { - logWarn('some metadata VHDs are missing', { json, missingVhds }) + logWarn('some VHDs linked to the backup are missing', { backup: json, missingVhds }) if (remove) { - logInfo('deleting incomplete backup', { json }) + logInfo('deleting incomplete backup', { path: json }) jsons.delete(json) await handler.unlink(json) } @@ -414,9 +419,9 @@ exports.cleanVm = async function cleanVm( } } - logWarn('unused VHD', { vhd }) + logWarn('unused VHD', { path: vhd }) if (remove) { - logInfo('deleting unused VHD', { vhd }) + logInfo('deleting unused VHD', { path: vhd }) unusedVhdsDeletion.push(VhdAbstract.unlink(handler, vhd)) } } @@ -497,11 +502,15 @@ exports.cleanVm = async function cleanVm( // don't warn if the size has changed after a merge if (!merged && fileSystemSize !== size) { - logWarn('incorrect size in metadata', { size: size ?? 'none', fileSystemSize }) + logWarn('incorrect backup size in metadata', { + path: metadataPath, + actual: size ?? 'none', + expected: fileSystemSize, + }) } } } catch (error) { - logWarn('failed to get metadata size', { metadataPath, error }) + logWarn('failed to get backup size', { backup: metadataPath, error }) return } @@ -511,7 +520,7 @@ exports.cleanVm = async function cleanVm( try { await handler.writeFile(metadataPath, JSON.stringify(metadata), { flags: 'w' }) } catch (error) { - logWarn('metadata size update failed', { metadataPath, error }) + logWarn('failed to update backup size in metadata', { path: metadataPath, error }) } } })