feat(backups): clean up other schedules snapshots (#5949)
Fixes xoa-support#4129
This commit is contained in:
parent
f9734d202b
commit
84dccd800f
@ -1,5 +1,6 @@
|
|||||||
const assert = require('assert')
|
const assert = require('assert')
|
||||||
const findLast = require('lodash/findLast.js')
|
const findLast = require('lodash/findLast.js')
|
||||||
|
const groupBy = require('lodash/groupBy.js')
|
||||||
const ignoreErrors = require('promise-toolbox/ignoreErrors.js')
|
const ignoreErrors = require('promise-toolbox/ignoreErrors.js')
|
||||||
const keyBy = require('lodash/keyBy.js')
|
const keyBy = require('lodash/keyBy.js')
|
||||||
const mapValues = require('lodash/mapValues.js')
|
const mapValues = require('lodash/mapValues.js')
|
||||||
@ -284,17 +285,28 @@ exports.VmBackup = class VmBackup {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async _removeUnusedSnapshots() {
|
async _removeUnusedSnapshots() {
|
||||||
// TODO: handle all schedules (no longer existing schedules default to 0 retention)
|
const jobSettings = this.job.settings
|
||||||
|
|
||||||
const { scheduleId } = this
|
|
||||||
const scheduleSnapshots = this._jobSnapshots.filter(_ => _.other_config['xo:backup:schedule'] === scheduleId)
|
|
||||||
|
|
||||||
const baseVmRef = this._baseVm?.$ref
|
const baseVmRef = this._baseVm?.$ref
|
||||||
|
const { config } = this
|
||||||
|
const baseSettings = {
|
||||||
|
...config.defaultSettings,
|
||||||
|
...config.metadata.defaultSettings,
|
||||||
|
...jobSettings[''],
|
||||||
|
}
|
||||||
|
|
||||||
|
const snapshotsPerSchedule = groupBy(this._jobSnapshots, _ => _.other_config['xo:backup:schedule'])
|
||||||
const xapi = this._xapi
|
const xapi = this._xapi
|
||||||
await asyncMap(getOldEntries(this._settings.snapshotRetention, scheduleSnapshots), ({ $ref }) => {
|
await asyncMap(Object.entries(snapshotsPerSchedule), ([scheduleId, snapshots]) => {
|
||||||
if ($ref !== baseVmRef) {
|
const settings = {
|
||||||
return xapi.VM_destroy($ref)
|
...baseSettings,
|
||||||
|
...jobSettings[scheduleId],
|
||||||
|
...jobSettings[this.vm.uuid],
|
||||||
}
|
}
|
||||||
|
return asyncMap(getOldEntries(settings.snapshotRetention, snapshots), ({ $ref }) => {
|
||||||
|
if ($ref !== baseVmRef) {
|
||||||
|
return xapi.VM_destroy($ref)
|
||||||
|
}
|
||||||
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
> Users must be able to say: “I had this issue, happy to know it's fixed”
|
> Users must be able to say: “I had this issue, happy to know it's fixed”
|
||||||
|
|
||||||
|
- [Backups] Delete unused snapshots related to other schedules (even no longer existing) (PR [#5949](https://github.com/vatesfr/xen-orchestra/pull/5949))
|
||||||
|
|
||||||
### Packages to release
|
### Packages to release
|
||||||
|
|
||||||
> Packages will be released in the order they are here, therefore, they should
|
> Packages will be released in the order they are here, therefore, they should
|
||||||
@ -30,5 +32,7 @@
|
|||||||
>
|
>
|
||||||
> In case of conflict, the highest (lowest in previous list) `$version` wins.
|
> In case of conflict, the highest (lowest in previous list) `$version` wins.
|
||||||
|
|
||||||
|
- @xen-orchestra/backup minor
|
||||||
- @xen-orchestra/proxy minor
|
- @xen-orchestra/proxy minor
|
||||||
|
- xo-server patch
|
||||||
- xo-web minor
|
- xo-web minor
|
||||||
|
Loading…
Reference in New Issue
Block a user