diff --git a/@vates/nbd-client/multi.mjs b/@vates/nbd-client/multi.mjs index 383a2488d..6bbc2d8b3 100644 --- a/@vates/nbd-client/multi.mjs +++ b/@vates/nbd-client/multi.mjs @@ -1,7 +1,9 @@ import { asyncEach } from '@vates/async-each' import { NBD_DEFAULT_BLOCK_SIZE } from './constants.mjs' import NbdClient from './index.mjs' +import { createLogger } from '@xen-orchestra/log' +const { warn } = createLogger('vates:nbd-client:multi') export default class MultiNbdClient { #clients = [] #readAhead @@ -19,8 +21,25 @@ export default class MultiNbdClient { } async connect() { - for (const client of this.#clients) { - await client.connect() + const connectedClients = [] + for (const clientId in this.#clients) { + const client = this.#clients[clientId] + try { + await client.connect() + connectedClients.push(client) + } catch (err) { + client.disconnect().catch(() => {}) + warn(`can't connect to one nbd client`, { err }) + } + } + if (connectedClients.length === 0) { + throw new Error(`Fail to connect to any Nbd client`) + } + if (connectedClients.length < this.#clients.length) { + warn( + `incomplete connection by multi Nbd, only ${connectedClients.length} over ${this.#clients.length} expected clients` + ) + this.#clients = connectedClients } } diff --git a/@xen-orchestra/backups/_runners/_vmRunners/IncrementalXapi.mjs b/@xen-orchestra/backups/_runners/_vmRunners/IncrementalXapi.mjs index e6161cc3c..62d8b2c5a 100644 --- a/@xen-orchestra/backups/_runners/_vmRunners/IncrementalXapi.mjs +++ b/@xen-orchestra/backups/_runners/_vmRunners/IncrementalXapi.mjs @@ -41,8 +41,8 @@ export const IncrementalXapi = class IncrementalXapiVmBackupRunner extends Abstr const deltaExport = await exportIncrementalVm(exportedVm, baseVm, { fullVdisRequired, - preferNbd: this._settings.preferNbd, nbdConcurrency: this._settings.nbdConcurrency, + preferNbd: this._settings.preferNbd, }) // since NBD is network based, if one disk use nbd , all the disk use them // except the suspended VDI diff --git a/packages/xo-server/src/api/backup-ng.mjs b/packages/xo-server/src/api/backup-ng.mjs index e75beb9a3..607b75b29 100644 --- a/packages/xo-server/src/api/backup-ng.mjs +++ b/packages/xo-server/src/api/backup-ng.mjs @@ -22,15 +22,15 @@ const SCHEMA_SETTINGS = { minimum: 0, optional: true, }, - preferNbd: { - type: 'boolean', - optional: true, - }, nbdConcurrency: { type: 'number', minimum: 1, optional: true, }, + preferNbd: { + type: 'boolean', + optional: true, + }, }, additionalProperties: true, },