feat(nbd-client/multi): allow partial connexion
This commit is contained in:
parent
847ad63c09
commit
79967e0eec
@ -1,7 +1,9 @@
|
|||||||
import { asyncEach } from '@vates/async-each'
|
import { asyncEach } from '@vates/async-each'
|
||||||
import { NBD_DEFAULT_BLOCK_SIZE } from './constants.mjs'
|
import { NBD_DEFAULT_BLOCK_SIZE } from './constants.mjs'
|
||||||
import NbdClient from './index.mjs'
|
import NbdClient from './index.mjs'
|
||||||
|
import { createLogger } from '@xen-orchestra/log'
|
||||||
|
|
||||||
|
const { warn } = createLogger('vates:nbd-client:multi')
|
||||||
export default class MultiNbdClient {
|
export default class MultiNbdClient {
|
||||||
#clients = []
|
#clients = []
|
||||||
#readAhead
|
#readAhead
|
||||||
@ -19,8 +21,25 @@ export default class MultiNbdClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async connect() {
|
async connect() {
|
||||||
for (const client of this.#clients) {
|
const connectedClients = []
|
||||||
await client.connect()
|
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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,8 +41,8 @@ export const IncrementalXapi = class IncrementalXapiVmBackupRunner extends Abstr
|
|||||||
|
|
||||||
const deltaExport = await exportIncrementalVm(exportedVm, baseVm, {
|
const deltaExport = await exportIncrementalVm(exportedVm, baseVm, {
|
||||||
fullVdisRequired,
|
fullVdisRequired,
|
||||||
preferNbd: this._settings.preferNbd,
|
|
||||||
nbdConcurrency: this._settings.nbdConcurrency,
|
nbdConcurrency: this._settings.nbdConcurrency,
|
||||||
|
preferNbd: this._settings.preferNbd,
|
||||||
})
|
})
|
||||||
// since NBD is network based, if one disk use nbd , all the disk use them
|
// since NBD is network based, if one disk use nbd , all the disk use them
|
||||||
// except the suspended VDI
|
// except the suspended VDI
|
||||||
|
@ -22,15 +22,15 @@ const SCHEMA_SETTINGS = {
|
|||||||
minimum: 0,
|
minimum: 0,
|
||||||
optional: true,
|
optional: true,
|
||||||
},
|
},
|
||||||
preferNbd: {
|
|
||||||
type: 'boolean',
|
|
||||||
optional: true,
|
|
||||||
},
|
|
||||||
nbdConcurrency: {
|
nbdConcurrency: {
|
||||||
type: 'number',
|
type: 'number',
|
||||||
minimum: 1,
|
minimum: 1,
|
||||||
optional: true,
|
optional: true,
|
||||||
},
|
},
|
||||||
|
preferNbd: {
|
||||||
|
type: 'boolean',
|
||||||
|
optional: true,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
additionalProperties: true,
|
additionalProperties: true,
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user