fix(vhd-lib/merge): don't delete children if renaming parent failed

Related to https://xcp-ng.org/forum/post/51529
This commit is contained in:
Julien Fontanet 2022-07-28 17:58:59 +02:00
parent 8864c2f2db
commit bb4504dd50
2 changed files with 11 additions and 11 deletions

View File

@ -32,6 +32,7 @@
- @xen-orchestra/backups patch
- @xen-orchestra/mixins minor
- @xen-orchestra/proxy minor
- vhd-lib patch
- xo-server minor
<!--packages-end-->

View File

@ -55,22 +55,21 @@ function makeThrottledWriter(handler, path, delay) {
// make the rename / delete part of the merge process
// will fail if parent and children are in different remote
function cleanupVhds(handler, parent, children, { logInfo = noop, remove = false } = {}) {
async function cleanupVhds(handler, parent, children, { logInfo = noop, remove = false } = {}) {
if (!Array.isArray(children)) {
children = [children]
}
const mergeTargetChild = children.pop()
return Promise.all([
VhdAbstract.rename(handler, parent, mergeTargetChild),
asyncMap(children, child => {
logInfo(`the VHD child is already merged`, { child })
if (remove) {
logInfo(`deleting merged VHD child`, { child })
return VhdAbstract.unlink(handler, child)
}
}),
])
await VhdAbstract.rename(handler, parent, mergeTargetChild)
return asyncMap(children, child => {
logInfo(`the VHD child is already merged`, { child })
if (remove) {
logInfo(`deleting merged VHD child`, { child })
return VhdAbstract.unlink(handler, child)
}
})
}
module.exports._cleanupVhds = cleanupVhds