From b0d400b6eb911fc5ee222556073989aa98bfc08d Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 28 Jul 2016 15:19:44 +0200 Subject: [PATCH] fix(Xapi#exportDeltaVm): better handling of removed VDIs (#370) Fixes vatesfr/xo-web#1333 --- src/xapi/index.js | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/xapi/index.js b/src/xapi/index.js index faf99d76f..84a629aa1 100644 --- a/src/xapi/index.js +++ b/src/xapi/index.js @@ -1074,11 +1074,16 @@ export default class Xapi extends XapiBase { const baseVm = baseVmId && this.getObject(baseVmId) + // refs of VM's VDIs → base's VDIs. const baseVdis = {} baseVm && forEach(baseVm.$VBDs, vbd => { - const vdi = vbd.$VDI - if (vdi && !find(fullVdisRequired, id => vdi.$snapshot_of.$id === id)) { - baseVdis[vbd.VDI] = vdi + let vdi, snapshotOf + if ( + (vdi = vbd.$VDI) && + (snapshotOf = vdi.$snapshot_of) && + !find(fullVdisRequired, id => snapshotOf.$id === id) + ) { + baseVdis[vdi.snapshot_of] = vdi } }) @@ -1102,15 +1107,7 @@ export default class Xapi extends XapiBase { const vdi = vbd.$VDI // Look for a snapshot of this vdi in the base VM. - let baseVdi - baseVm && forEach(vdi.$snapshot_of.$snapshots, vdi => { - if (baseVdis[vdi.$ref]) { - baseVdi = vdi - - // Stop iterating. - return false - } - }) + const baseVdi = baseVdis[vdi.snapshot_of] vdis[vdiId] = baseVdi && !disableBaseTags ? {