fix(backups/ImportVmBackup): use transfered size instead of backup size

Backup size is smaller in case of delta VHDs.
This commit is contained in:
Julien Fontanet 2021-04-09 15:33:50 +02:00
parent 6f626974ac
commit 9b1fbf0fbf
3 changed files with 8 additions and 3 deletions

View File

@ -3,6 +3,7 @@ const assert = require('assert')
const { formatFilenameDate } = require('./_filenameDate') const { formatFilenameDate } = require('./_filenameDate')
const { importDeltaVm } = require('./_deltaVm') const { importDeltaVm } = require('./_deltaVm')
const { Task } = require('./Task') const { Task } = require('./Task')
const { watchStreamSize } = require('./_watchStreamSize')
exports.ImportVmBackup = class ImportVmBackup { exports.ImportVmBackup = class ImportVmBackup {
constructor({ adapter, metadata, srUuid, xapi, settings: { newMacAddresses } = {} }) { constructor({ adapter, metadata, srUuid, xapi, settings: { newMacAddresses } = {} }) {
@ -18,13 +19,17 @@ exports.ImportVmBackup = class ImportVmBackup {
const metadata = this._metadata const metadata = this._metadata
const isFull = metadata.mode === 'full' const isFull = metadata.mode === 'full'
const sizeContainer = { size: 0 }
let backup let backup
if (isFull) { if (isFull) {
backup = await adapter.readFullVmBackup(metadata) backup = await adapter.readFullVmBackup(metadata)
watchStreamSize(backup, sizeContainer)
} else { } else {
assert.strictEqual(metadata.mode, 'delta') assert.strictEqual(metadata.mode, 'delta')
backup = await adapter.readDeltaVmBackup(metadata) backup = await adapter.readDeltaVmBackup(metadata)
Object.values(backup.streams).forEach(stream => watchStreamSize(stream, sizeContainer))
} }
return Task.run( return Task.run(
@ -52,7 +57,7 @@ exports.ImportVmBackup = class ImportVmBackup {
]) ])
return { return {
size: metadata.size, size: sizeContainer.size,
id: await xapi.getField('VM', vmRef, 'uuid'), id: await xapi.getField('VM', vmRef, 'uuid'),
} }
} }

View File

@ -1,5 +1,4 @@
exports.watchStreamSize = function watchStreamSize(stream) { exports.watchStreamSize = function watchStreamSize(stream, container = { size: 0 }) {
const container = { size: 0 }
stream.on('data', data => { stream.on('data', data => {
container.size += data.length container.size += data.length
}) })

View File

@ -17,6 +17,7 @@
- [Backup] Fix `vm.refresh_snapshots is not a function` error - [Backup] Fix `vm.refresh_snapshots is not a function` error
- [Backup] Fix `cannot read property "length" of undefined` when using _delete first_ [Forum post](https://xcp-ng.org/forum/topic/4440/error-on-delta-backup-cannot-read-property-length-of-undefined) - [Backup] Fix `cannot read property "length" of undefined` when using _delete first_ [Forum post](https://xcp-ng.org/forum/topic/4440/error-on-delta-backup-cannot-read-property-length-of-undefined)
- [Delta backup] Fix merge task not under corresponding remote and missing merge size in summary [#5708](https://github.com/vatesfr/xen-orchestra/issues/5708) - [Delta backup] Fix merge task not under corresponding remote and missing merge size in summary [#5708](https://github.com/vatesfr/xen-orchestra/issues/5708)
- [Delta backup restore] Fix incorrect reported size (and speed)
- [Settings/Logs] Correctly hide `pool.listMissingPatches` and `host.stats` errors - [Settings/Logs] Correctly hide `pool.listMissingPatches` and `host.stats` errors
- [Plugins] Fix `strict mode: unknown keyword` when configuring some plugins - [Plugins] Fix `strict mode: unknown keyword` when configuring some plugins