From a6869638f532a0b91221c8d38129fdadd992bddd Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 21 Dec 2017 09:55:13 +0100 Subject: [PATCH] chore(package): upgrade golike-defer to 0.4.1 (#632) --- package.json | 2 +- src/api/xosan.js | 32 ++++++++++++------------- src/xapi/index.js | 50 ++++++++++++++++++++-------------------- src/xapi/mixins/vm.js | 6 ++--- src/xo-mixins/backups.js | 28 +++++++++++----------- yarn.lock | 6 ++--- 6 files changed, 62 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index df88ed418..a696d39cc 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "fatfs": "^0.10.4", "from2": "^2.3.0", "fs-extra": "^5.0.0", - "golike-defer": "^0.3.0", + "golike-defer": "^0.4.1", "hashy": "^0.6.2", "helmet": "^3.9.0", "highland": "^2.11.1", diff --git a/src/api/xosan.js b/src/api/xosan.js index 565ab5249..ef5474eb6 100644 --- a/src/api/xosan.js +++ b/src/api/xosan.js @@ -308,7 +308,7 @@ async function glusterCmd (glusterEndpoint, cmd, ignoreError = false) { return result } -const createNetworkAndInsertHosts = defer.onFailure(async function ($onFailure, xapi, pif, vlan, networkPrefix) { +const createNetworkAndInsertHosts = defer(async function ($defer, xapi, pif, vlan, networkPrefix) { let hostIpLastNumber = HOST_FIRST_NUMBER const xosanNetwork = await xapi.createNetwork({ name: 'XOSAN network', @@ -317,7 +317,7 @@ const createNetworkAndInsertHosts = defer.onFailure(async function ($onFailure, mtu: pif.mtu, vlan: +vlan, }) - $onFailure(() => xapi.deleteNetwork(xosanNetwork)) + $defer.onFailure(() => xapi.deleteNetwork(xosanNetwork)) const addresses = xosanNetwork.$PIFs.map(pif => ({pif, address: networkPrefix + (hostIpLastNumber++)})) await asyncMap(addresses, addressAndPif => reconfigurePifIP(xapi, addressAndPif.pif, addressAndPif.address)) const master = xapi.pool.$master @@ -354,10 +354,10 @@ async function getOrCreateSshKey (xapi) { return sshKey } -const _probePoolAndWaitForPresence = defer.onFailure(async function ($onFailure, glusterEndpoint, addresses) { +const _probePoolAndWaitForPresence = defer(async function ($defer, glusterEndpoint, addresses) { await asyncMap(addresses, async (address) => { await glusterCmd(glusterEndpoint, 'peer probe ' + address) - $onFailure(() => glusterCmd(glusterEndpoint, 'peer detach ' + address, true)) + $defer.onFailure(() => glusterCmd(glusterEndpoint, 'peer detach ' + address, true)) }) function shouldRetry (peers) { @@ -416,7 +416,7 @@ async function configureGluster (redundancy, ipAndHosts, glusterEndpoint, gluste await glusterCmd(glusterEndpoint, 'volume start xosan') } -export const createSR = defer.onFailure(async function ($onFailure, { +export const createSR = defer(async function ($defer, { template, pif, vlan, srs, glusterType, redundancy, brickSize = this::computeBrickSize(srs), memorySize = 2 * GIGABYTE, ipRange = DEFAULT_NETWORK_PREFIX + '.0', }) { @@ -444,7 +444,7 @@ export const createSR = defer.onFailure(async function ($onFailure, { CURRENT_POOL_OPERATIONS[poolId] = {...OPERATION_OBJECT, state: 0} try { const xosanNetwork = await createNetworkAndInsertHosts(xapi, pif, vlan, networkPrefix) - $onFailure(() => xapi.deleteNetwork(xosanNetwork)) + $defer.onFailure(() => xapi.deleteNetwork(xosanNetwork)) const sshKey = await getOrCreateSshKey(xapi) const srsObjects = map(srs, srId => xapi.getObject(srId)) await Promise.all(srsObjects.map(sr => callPlugin(xapi, sr.$PBDs[0].$host, 'receive_ssh_keys', { @@ -456,11 +456,11 @@ export const createSR = defer.onFailure(async function ($onFailure, { const firstSr = srsObjects[0] CURRENT_POOL_OPERATIONS[poolId] = {...OPERATION_OBJECT, state: 1} const firstVM = await this::_importGlusterVM(xapi, template, firstSr) - $onFailure(() => xapi.deleteVm(firstVM, true)) + $defer.onFailure(() => xapi.deleteVm(firstVM, true)) CURRENT_POOL_OPERATIONS[poolId] = {...OPERATION_OBJECT, state: 2} const copiedVms = await asyncMap(srsObjects.slice(1), sr => copyVm(xapi, firstVM, sr)::tap(({vm}) => - $onFailure(() => xapi.deleteVm(vm)) + $defer.onFailure(() => xapi.deleteVm(vm)) ) ) const vmsAndSrs = [{ @@ -473,7 +473,7 @@ export const createSR = defer.onFailure(async function ($onFailure, { const sr = firstSr const arbiterIP = networkPrefix + (vmIpLastNumber++) const arbiterVm = await xapi.copyVm(firstVM, sr) - $onFailure(() => xapi.deleteVm(arbiterVm, true)) + $defer.onFailure(() => xapi.deleteVm(arbiterVm, true)) arbiter = await _prepareGlusterVm(xapi, sr, arbiterVm, xosanNetwork, arbiterIP, { labelSuffix: '_arbiter', increaseDataDisk: false, @@ -498,7 +498,7 @@ export const createSR = defer.onFailure(async function ($onFailure, { 'xosan', '', true, {}) debug('sr created') // we just forget because the cleanup actions are stacked in the $onFailure system - $onFailure(() => xapi.forgetSr(xosanSrRef)) + $defer.onFailure(() => xapi.forgetSr(xosanSrRef)) if (arbiter) { ipAndHosts.push(arbiter) } @@ -802,7 +802,7 @@ const _median = arr => { return arr[Math.floor(arr.length / 2)] } -const insertNewGlusterVm = defer.onFailure(async function ($onFailure, xapi, xosansr, lvmsrId, { +const insertNewGlusterVm = defer(async function ($defer, xapi, xosansr, lvmsrId, { labelSuffix = '', glusterEndpoint = null, ipAddress = null, increaseDataDisk = true, brickSize = Infinity, }) { @@ -822,7 +822,7 @@ const insertNewGlusterVm = defer.onFailure(async function ($onFailure, xapi, xos const srObject = xapi.getObject(lvmsrId) // can't really copy an existing VM, because existing gluster VMs disks might too large to be copied. const newVM = await this::_importGlusterVM(xapi, data.template, lvmsrId) - $onFailure(() => xapi.deleteVm(newVM, true)) + $defer.onFailure(() => xapi.deleteVm(newVM, true)) const addressAndHost = await _prepareGlusterVm(xapi, srObject, newVM, xosanNetwork, ipAddress, { labelSuffix, increaseDataDisk, @@ -836,7 +836,7 @@ const insertNewGlusterVm = defer.onFailure(async function ($onFailure, xapi, xos return {data, newVM, addressAndHost, glusterEndpoint} }) -export const addBricks = defer.onFailure(async function ($onFailure, {xosansr, lvmsrs, brickSize}) { +export const addBricks = defer(async function ($defer, {xosansr, lvmsrs, brickSize}) { const OPERATION_OBJECT = { operation: 'addBricks', states: ['insertingNewVms', 'addingBricks', 'scaningSr'], @@ -857,8 +857,8 @@ export const addBricks = defer.onFailure(async function ($onFailure, {xosansr, l const ipAddress = _findIPAddressOutsideList(usedAddresses.concat(newAddresses), data.networkPrefix) newAddresses.push(ipAddress) const {newVM, addressAndHost} = await this::insertNewGlusterVm(xapi, xosansr, newSr, {ipAddress, brickSize}) - $onFailure(() => glusterCmd(glusterEndpoint, 'peer detach ' + ipAddress, true)) - $onFailure(() => xapi.deleteVm(newVM, true)) + $defer.onFailure(() => glusterCmd(glusterEndpoint, 'peer detach ' + ipAddress, true)) + $defer.onFailure(() => xapi.deleteVm(newVM, true)) const brickName = addressAndHost.brickName newNodes.push({brickName, host: addressAndHost.host.$id, vm: {id: newVM.$id, ip: ipAddress}, underlyingSr: newSr}) } @@ -901,7 +901,7 @@ addBricks.resolve = { lvmsrs: ['sr', 'SR', 'administrate'], } -export const removeBricks = defer.onFailure(async function ($onFailure, {xosansr, bricks}) { +export const removeBricks = defer(async function ($defer, {xosansr, bricks}) { const xapi = this.getXapi(xosansr) if (CURRENT_POOL_OPERATIONS[xapi.pool.$id]) { throw new Error('this there is already a XOSAN operation running on this pool') diff --git a/src/xapi/index.js b/src/xapi/index.js index 9c7f1da16..48ad46026 100644 --- a/src/xapi/index.js +++ b/src/xapi/index.js @@ -792,8 +792,8 @@ export default class Xapi extends XapiBase { // Create a snapshot of the VM and returns a delta export object. @cancellable - @deferrable.onFailure - async exportDeltaVm ($onFailure, $cancelToken, vmId, baseVmId = undefined, { + @deferrable + async exportDeltaVm ($defer, $cancelToken, vmId, baseVmId = undefined, { bypassVdiChainsCheck = false, // Contains a vdi.$id set of vmId. @@ -807,7 +807,7 @@ export default class Xapi extends XapiBase { } const vm = await this.snapshotVm(vmId) - $onFailure(() => this._deleteVm(vm)) + $defer.onFailure(() => this._deleteVm(vm)) if (snapshotNameLabel) { this._setObjectProperties(vm, { nameLabel: snapshotNameLabel, @@ -878,7 +878,7 @@ export default class Xapi extends XapiBase { $SR$uuid: vdi.$SR.uuid, } const stream = streams[`${vdiRef}.vhd`] = this._exportVdi($cancelToken, vdi, baseVdi, VDI_FORMAT_VHD) - $onFailure(stream.cancel) + $defer.onFailure(stream.cancel) }) const vifs = {} @@ -908,8 +908,8 @@ export default class Xapi extends XapiBase { }) } - @deferrable.onFailure - async importDeltaVm ($onFailure, delta, { + @deferrable + async importDeltaVm ($defer, delta, { deleteBase = false, disableStartAfterImport = true, mapVdisSrs = {}, @@ -950,7 +950,7 @@ export default class Xapi extends XapiBase { is_a_template: false, }) ) - $onFailure(() => this._deleteVm(vm)) + $defer.onFailure(() => this._deleteVm(vm)) await Promise.all([ this._setObjectProperties(vm, { @@ -983,7 +983,7 @@ export default class Xapi extends XapiBase { }, sr: mapVdisSrs[vdi.uuid] || srId, }) - $onFailure(() => this._deleteVdi(newVdi)) + $defer.onFailure(() => this._deleteVdi(newVdi)) return newVdi } @@ -999,7 +999,7 @@ export default class Xapi extends XapiBase { const newVdi = await this._getOrWaitObject( await this._cloneVdi(baseVdi) ) - $onFailure(() => this._deleteVdi(newVdi)) + $defer.onFailure(() => this._deleteVdi(newVdi)) await this._updateObjectMapProperty(newVdi, 'other_config', { [TAG_COPY_SRC]: vdi.uuid, @@ -1238,8 +1238,8 @@ export default class Xapi extends XapiBase { return vmRef } - @deferrable.onFailure - async _importOvaVm ($onFailure, stream, { + @deferrable + async _importOvaVm ($defer, stream, { descriptionLabel, disks, memory, @@ -1260,7 +1260,7 @@ export default class Xapi extends XapiBase { VCPUs_max: nCpus, }) ) - $onFailure(() => this._deleteVm(vm)) + $defer.onFailure(() => this._deleteVm(vm)) // Disable start and change the VM name label during import. await Promise.all([ this.addForbiddenOperationToVm(vm.$id, 'start', 'OVA import in progress...'), @@ -1277,7 +1277,7 @@ export default class Xapi extends XapiBase { name_label: disk.nameLabel, sr: sr.$ref, }) - $onFailure(() => this._deleteVdi(vdi)) + $defer.onFailure(() => this._deleteVdi(vdi)) return this._createVbd(vm, vdi, { position: disk.position }) }).concat(map(networks, (networkId, i) => ( @@ -1959,8 +1959,8 @@ export default class Xapi extends XapiBase { ) ) } - @deferrable.onFailure - async createNetwork ($onFailure, { + @deferrable + async createNetwork ($defer, { name, description = 'Created with Xen Orchestra', pifId, @@ -1973,7 +1973,7 @@ export default class Xapi extends XapiBase { MTU: asInteger(mtu), other_config: {}, }) - $onFailure(() => this.call('network.destroy', networkRef)) + $defer.onFailure(() => this.call('network.destroy', networkRef)) if (pifId) { await this.call('pool.create_VLAN_from_PIF', this.getObject(pifId).$ref, networkRef, asInteger(vlan)) } @@ -2017,15 +2017,15 @@ export default class Xapi extends XapiBase { ) } - @deferrable.onFailure - async createBondedNetwork ($onFailure, { + @deferrable + async createBondedNetwork ($defer, { bondMode, mac = '', pifIds, ...params }) { const network = await this.createNetwork(params) - $onFailure(() => this.deleteNetwork(network)) + $defer.onFailure(() => this.deleteNetwork(network)) // TODO: test and confirm: // Bond.create is called here with PIFs from one host but XAPI should then replicate the // bond on each host in the same pool with the corresponding PIFs (ie same interface names?). @@ -2116,15 +2116,15 @@ export default class Xapi extends XapiBase { } // Generic Config Drive - @deferrable.onFailure - async createCloudInitConfigDrive ($onFailure, vmId, srId, config) { + @deferrable + async createCloudInitConfigDrive ($defer, vmId, srId, config) { const vm = this.getObject(vmId) const sr = this.getObject(srId) // First, create a small VDI (10MB) which will become the ConfigDrive const buffer = fatfsBufferInit() const vdi = await this.createVdi(buffer.length, { name_label: 'XO CloudConfigDrive', sr: sr.$ref }) - $onFailure(() => this._deleteVdi(vdi)) + $defer.onFailure(() => this._deleteVdi(vdi)) // Then, generate a FAT fs const fs = promisifyAll(fatfs.createFileSystem(fatfsBuffer(buffer))) @@ -2146,14 +2146,14 @@ export default class Xapi extends XapiBase { await this._createVbd(vm, vdi) } - @deferrable.onFailure - async createTemporaryVdiOnSr ($onFailure, stream, sr, name_label, name_description) { + @deferrable + async createTemporaryVdiOnSr ($defer, stream, sr, name_label, name_description) { const vdi = await this.createVdi(stream.length, { sr: sr.$ref, name_label, name_description, }) - $onFailure(() => this._deleteVdi(vdi)) + $defer.onFailure(() => this._deleteVdi(vdi)) await this.importVdiContent(vdi.$id, stream, { format: VDI_FORMAT_RAW }) diff --git a/src/xapi/mixins/vm.js b/src/xapi/mixins/vm.js index 36a6888b7..f34a06c2f 100644 --- a/src/xapi/mixins/vm.js +++ b/src/xapi/mixins/vm.js @@ -27,8 +27,8 @@ const XEN_VIDEORAM_VALUES = [1, 2, 4, 8, 16] export default { // TODO: clean up on error. - @deferrable.onFailure - async createVm ($onFailure, templateId, { + @deferrable + async createVm ($defer, templateId, { name_label, // eslint-disable-line camelcase nameLabel = name_label, // eslint-disable-line camelcase @@ -62,7 +62,7 @@ export default { // Clones the template. const vmRef = await this[clone ? '_cloneVm' : '_copyVm'](template, nameLabel) - $onFailure(() => this.deleteVm(vmRef)) + $defer.onFailure(() => this.deleteVm(vmRef)) // TODO: copy BIOS strings? diff --git a/src/xo-mixins/backups.js b/src/xo-mixins/backups.js index 444fabe3a..454dab100 100644 --- a/src/xo-mixins/backups.js +++ b/src/xo-mixins/backups.js @@ -399,8 +399,8 @@ export default class { // ----------------------------------------------------------------- - @deferrable.onFailure - async deltaCopyVm ($onFailure, srcVm, targetSr, force = false, retention = 1) { + @deferrable + async deltaCopyVm ($defer, srcVm, targetSr, force = false, retention = 1) { const transferStart = Date.now() const srcXapi = this._xo.getXapi(srcVm) const targetXapi = this._xo.getXapi(targetSr) @@ -426,8 +426,8 @@ export default class { bypassVdiChainsCheck: force, snapshotNameLabel: `XO_DELTA_EXPORT: ${targetSr.name_label} (${targetSr.uuid})`, }) - $onFailure(() => srcXapi.deleteVm(delta.vm.uuid)) - $onFailure(cancel) + $defer.onFailure(() => srcXapi.deleteVm(delta.vm.uuid)) + $defer.onFailure(cancel) const date = safeDateFormat(Date.now()) delta.vm.name_label += ` (${date})` @@ -774,8 +774,8 @@ export default class { } } - @deferrable.onFailure - async rollingDeltaVmBackup ($onFailure, {vm, remoteId, tag, retention}) { + @deferrable + async rollingDeltaVmBackup ($defer, {vm, remoteId, tag, retention}) { const transferStart = Date.now() const handler = await this._xo.getRemoteHandler(remoteId) const xapi = this._xo.getXapi(vm) @@ -817,8 +817,8 @@ export default class { fullVdisRequired, disableBaseTags: true, }) - $onFailure(() => xapi.deleteVm(delta.vm.uuid)) - $onFailure(cancel) + $defer.onFailure(() => xapi.deleteVm(delta.vm.uuid)) + $defer.onFailure(cancel) // Save vdis. const vdiBackups = await pSettle( @@ -857,7 +857,7 @@ export default class { } } - $onFailure(() => asyncMap(fulFilledVdiBackups, vdiBackup => + $defer.onFailure(() => asyncMap(fulFilledVdiBackups, vdiBackup => handler.unlink(`${dir}/${vdiBackup.value()}`)::ignoreErrors() )) @@ -869,7 +869,7 @@ export default class { const backupFormat = `${date}_${vm.name_label}` const infoPath = `${dir}/${backupFormat}${DELTA_BACKUP_EXT}` - $onFailure(() => handler.unlink(infoPath)) + $defer.onFailure(() => handler.unlink(infoPath)) // Write Metadata. await handler.outputFile(infoPath, JSON.stringify(delta, null, 2)) @@ -972,11 +972,11 @@ export default class { return this._backupVm(vm, handler, file, {compress, onlyMetadata}) } - @deferrable.onFailure - async _backupVm ($onFailure, vm, handler, file, {compress, onlyMetadata}) { + @deferrable + async _backupVm ($defer, vm, handler, file, {compress, onlyMetadata}) { const targetStream = await handler.createOutputStream(file) - $onFailure.call(handler, 'unlink', file) - $onFailure.call(targetStream, 'close') + $defer.onFailure.call(handler, 'unlink', file) + $defer.onFailure.call(targetStream, 'close') const promise = eventToPromise(targetStream, 'finish') diff --git a/yarn.lock b/yarn.lock index ad9b90974..5d64b06e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3069,9 +3069,9 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -golike-defer@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/golike-defer/-/golike-defer-0.3.0.tgz#3043bf000e545ea8b4bddbda62f6198104c1a08a" +golike-defer@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/golike-defer/-/golike-defer-0.4.1.tgz#7a1cd435d61e461305805d980b133a0f3db4e1cc" graceful-fs@4.X, graceful-fs@^4.0.0, graceful-fs@^4.1.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: version "4.1.11"