feat(xo-server#_listXoMetadataBackups): use @xen-orchestra/backups lib (#5609)

This commit is contained in:
badrAZ 2021-02-24 10:16:27 +01:00 committed by GitHub
parent 95d6d0a0fe
commit 5bd4c54ab6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -18,8 +18,6 @@ const DIR_XO_CONFIG_BACKUPS = 'xo-config-backups'
const DIR_XO_POOL_METADATA_BACKUPS = 'xo-pool-metadata-backups' const DIR_XO_POOL_METADATA_BACKUPS = 'xo-pool-metadata-backups'
const METADATA_BACKUP_JOB_TYPE = 'metadataBackup' const METADATA_BACKUP_JOB_TYPE = 'metadataBackup'
const compareTimestamp = (a, b) => a.timestamp - b.timestamp
const DEFAULT_RETENTION = 0 const DEFAULT_RETENTION = 0
type ReportWhen = 'always' | 'failure' | 'never' type ReportWhen = 'always' | 'failure' | 'never'
@ -54,14 +52,6 @@ const logInstantFailureTask = (logger, { data, error, message, parentId }) => {
}) })
} }
const createSafeReaddir = (handler, methodName) => (path, options) =>
handler.list(path, options).catch(error => {
if (error?.code !== 'ENOENT') {
log.warn(`${methodName} ${path}`, { error })
}
return []
})
const deleteOldBackups = (handler, dir, retention, handleError) => const deleteOldBackups = (handler, dir, retention, handleError) =>
handler.list(dir).then(list => { handler.list(dir).then(list => {
list.sort() list.sort()
@ -659,43 +649,28 @@ export default class metadataBackup {
// }] // }]
async _listXoMetadataBackups(remoteId) { async _listXoMetadataBackups(remoteId) {
const app = this._app const app = this._app
const { proxy, url, options } = await app.getRemoteWithCredentials(remoteId) const remote = await app.getRemoteWithCredentials(remoteId)
if (proxy !== undefined) {
const { [remoteId]: backups } = await app.callProxyMethod(proxy, 'backup.listXoMetadataBackups', { let backups
if (remote.proxy !== undefined) {
;({ [remoteId]: backups } = await app.callProxyMethod(remote.proxy, 'backup.listXoMetadataBackups', {
remotes: { remotes: {
[remoteId]: { [remoteId]: {
url, url: remote.url,
options, options: remote.options,
}, },
}, },
}) }))
} else {
// inject the remote id on the backup which is needed for restoreMetadataBackup() backups = await using(app.getBackupsRemoteAdapter(remote), adapter => adapter.listXoMetadataBackups())
backups.forEach(backup => {
backup.id = `${remoteId}${backup.id}`
})
return backups
} }
const handler = await this._app.getRemoteHandler(remoteId) // inject the remote id on the backup which is needed for restoreMetadataBackup()
const safeReaddir = createSafeReaddir(handler, 'listXoMetadataBackups') backups.forEach(backup => {
backup.id = `${remoteId}${backup.id}`
})
const backups = [] return backups
await asyncMap(safeReaddir(DIR_XO_CONFIG_BACKUPS, { prependDir: true }), scheduleDir =>
asyncMap(safeReaddir(scheduleDir, { prependDir: true }), async backupDir => {
try {
backups.push({
id: `${remoteId}${backupDir}`,
...JSON.parse(String(await handler.readFile(`${backupDir}/metadata.json`))),
})
} catch (error) {
log.warn(`listXoMetadataBackups ${backupDir}`, { error })
}
})
)
return backups.sort(compareTimestamp)
} }
// poolBackups // poolBackups