@xen-orchestra/backups 0.39.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/{Backup.js → Backup.mjs} +4 -6
  2. package/{DurablePartition.js → DurablePartition.mjs} +2 -4
  3. package/{HealthCheckVmBackup.js → HealthCheckVmBackup.mjs} +2 -4
  4. package/{ImportVmBackup.js → ImportVmBackup.mjs} +6 -8
  5. package/{RemoteAdapter.js → RemoteAdapter.mjs} +69 -76
  6. package/{RestoreMetadataBackup.js → RestoreMetadataBackup.mjs} +4 -6
  7. package/{Task.js → Task.mjs} +3 -6
  8. package/_backupType.mjs +4 -0
  9. package/{_backupWorker.js → _backupWorker.mjs} +22 -22
  10. package/{_cancelableMap.js → _cancelableMap.mjs} +3 -5
  11. package/{_cleanVm.js → _cleanVm.mjs} +16 -19
  12. package/_filenameDate.mjs +6 -0
  13. package/{_getOldEntries.js → _getOldEntries.mjs} +1 -3
  14. package/{_getTmpDir.js → _getTmpDir.mjs} +5 -7
  15. package/_getVmBackupDir.mjs +5 -0
  16. package/{_incrementalVm.js → _incrementalVm.mjs} +21 -20
  17. package/{_isValidXva.js → _isValidXva.mjs} +2 -5
  18. package/{_listPartitions.js → _listPartitions.mjs} +6 -9
  19. package/{_lvm.js → _lvm.mjs} +5 -7
  20. package/_runners/{Metadata.js → Metadata.mjs} +10 -12
  21. package/_runners/{VmsRemote.js → VmsRemote.mjs} +12 -14
  22. package/_runners/{VmsXapi.js → VmsXapi.mjs} +13 -15
  23. package/_runners/{_Abstract.js → _Abstract.mjs} +7 -9
  24. package/_runners/{_PoolMetadataBackup.js → _PoolMetadataBackup.mjs} +7 -10
  25. package/_runners/{_RemoteTimeoutError.js → _RemoteTimeoutError.mjs} +1 -3
  26. package/_runners/{_XoMetadataBackup.js → _XoMetadataBackup.mjs} +6 -8
  27. package/_runners/{_createStreamThrottle.js → _createStreamThrottle.mjs} +4 -6
  28. package/_runners/{_forkStreamUnpipe.js → _forkStreamUnpipe.mjs} +4 -5
  29. package/_runners/{_getAdaptersByRemote.js → _getAdaptersByRemote.mjs} +1 -3
  30. package/_runners/_runTask.mjs +5 -0
  31. package/_runners/_vmRunners/{FullRemote.js → FullRemote.mjs} +9 -12
  32. package/_runners/_vmRunners/{FullXapi.js → FullXapi.mjs} +7 -9
  33. package/_runners/_vmRunners/{IncrementalRemote.js → IncrementalRemote.mjs} +11 -12
  34. package/_runners/_vmRunners/{IncrementalXapi.js → IncrementalXapi.mjs} +18 -20
  35. package/_runners/_vmRunners/{_Abstract.js → _Abstract.mjs} +4 -6
  36. package/_runners/_vmRunners/{_AbstractRemote.js → _AbstractRemote.mjs} +6 -6
  37. package/_runners/_vmRunners/{_AbstractXapi.js → _AbstractXapi.mjs} +14 -17
  38. package/_runners/_vmRunners/_forkDeltaExport.mjs +11 -0
  39. package/_runners/_writers/{FullRemoteWriter.js → FullRemoteWriter.mjs} +6 -8
  40. package/_runners/_writers/{FullXapiWriter.js → FullXapiWriter.mjs} +10 -12
  41. package/_runners/_writers/{IncrementalRemoteWriter.js → IncrementalRemoteWriter.mjs} +22 -24
  42. package/_runners/_writers/{IncrementalXapiWriter.js → IncrementalXapiWriter.mjs} +11 -13
  43. package/_runners/_writers/{_AbstractFullWriter.js → _AbstractFullWriter.mjs} +2 -4
  44. package/_runners/_writers/{_AbstractIncrementalWriter.js → _AbstractIncrementalWriter.mjs} +2 -4
  45. package/_runners/_writers/{_AbstractWriter.js → _AbstractWriter.mjs} +3 -5
  46. package/_runners/_writers/{_MixinRemoteWriter.js → _MixinRemoteWriter.mjs} +10 -12
  47. package/_runners/_writers/{_MixinXapiWriter.js → _MixinXapiWriter.mjs} +5 -7
  48. package/_runners/_writers/_checkVhd.mjs +6 -0
  49. package/_runners/_writers/{_listReplicatedVms.js → _listReplicatedVms.mjs} +1 -3
  50. package/_runners/_writers/{_packUuid.js → _packUuid.mjs} +1 -3
  51. package/{_watchStreamSize.js → _watchStreamSize.mjs} +1 -3
  52. package/{extractIdsFromSimplePattern.js → extractIdsFromSimplePattern.mjs} +1 -3
  53. package/{formatVmBackups.js → formatVmBackups.mjs} +3 -5
  54. package/merge-worker/{cli.js → cli.mjs} +9 -11
  55. package/merge-worker/{index.js → index.mjs} +6 -7
  56. package/package.json +8 -7
  57. package/{parseMetadataBackupId.js → parseMetadataBackupId.mjs} +2 -4
  58. package/{runBackupWorker.js → runBackupWorker.mjs} +4 -7
  59. package/_backupType.js +0 -6
  60. package/_filenameDate.js +0 -8
  61. package/_getVmBackupDir.js +0 -8
  62. package/_runners/_runTask.js +0 -6
  63. package/_runners/_vmRunners/_forkDeltaExport.js +0 -12
  64. package/_runners/_writers/_checkVhd.js +0 -8
@@ -1,22 +1,20 @@
1
- 'use strict'
1
+ import { asyncMap } from '@xen-orchestra/async-map'
2
+ import Disposable from 'promise-toolbox/Disposable'
3
+ import ignoreErrors from 'promise-toolbox/ignoreErrors'
2
4
 
3
- const { asyncMap } = require('@xen-orchestra/async-map')
4
- const Disposable = require('promise-toolbox/Disposable')
5
- const ignoreErrors = require('promise-toolbox/ignoreErrors')
6
-
7
- const { extractIdsFromSimplePattern } = require('../extractIdsFromSimplePattern.js')
8
- const { PoolMetadataBackup } = require('./_PoolMetadataBackup.js')
9
- const { XoMetadataBackup } = require('./_XoMetadataBackup.js')
10
- const { DEFAULT_SETTINGS, Abstract } = require('./_Abstract.js')
11
- const { runTask } = require('./_runTask.js')
12
- const { getAdaptersByRemote } = require('./_getAdaptersByRemote.js')
5
+ import { extractIdsFromSimplePattern } from '../extractIdsFromSimplePattern.mjs'
6
+ import { PoolMetadataBackup } from './_PoolMetadataBackup.mjs'
7
+ import { XoMetadataBackup } from './_XoMetadataBackup.mjs'
8
+ import { DEFAULT_SETTINGS, Abstract } from './_Abstract.mjs'
9
+ import { runTask } from './_runTask.mjs'
10
+ import { getAdaptersByRemote } from './_getAdaptersByRemote.mjs'
13
11
 
14
12
  const DEFAULT_METADATA_SETTINGS = {
15
13
  retentionPoolMetadata: 0,
16
14
  retentionXoMetadata: 0,
17
15
  }
18
16
 
19
- exports.Metadata = class MetadataBackupRunner extends Abstract {
17
+ export const Metadata = class MetadataBackupRunner extends Abstract {
20
18
  _computeBaseSettings(config, job) {
21
19
  const baseSettings = { ...DEFAULT_SETTINGS }
22
20
  Object.assign(baseSettings, DEFAULT_METADATA_SETTINGS, config.defaultSettings, config.metadata?.defaultSettings)
@@ -1,17 +1,15 @@
1
- 'use strict'
1
+ import { asyncMapSettled } from '@xen-orchestra/async-map'
2
+ import Disposable from 'promise-toolbox/Disposable'
3
+ import { limitConcurrency } from 'limit-concurrency-decorator'
2
4
 
3
- const { asyncMapSettled } = require('@xen-orchestra/async-map')
4
- const Disposable = require('promise-toolbox/Disposable')
5
- const { limitConcurrency } = require('limit-concurrency-decorator')
6
-
7
- const { extractIdsFromSimplePattern } = require('../extractIdsFromSimplePattern.js')
8
- const { Task } = require('../Task.js')
9
- const createStreamThrottle = require('./_createStreamThrottle.js')
10
- const { DEFAULT_SETTINGS, Abstract } = require('./_Abstract.js')
11
- const { runTask } = require('./_runTask.js')
12
- const { getAdaptersByRemote } = require('./_getAdaptersByRemote.js')
13
- const { FullRemote } = require('./_vmRunners/FullRemote.js')
14
- const { IncrementalRemote } = require('./_vmRunners/IncrementalRemote.js')
5
+ import { extractIdsFromSimplePattern } from '../extractIdsFromSimplePattern.mjs'
6
+ import { Task } from '../Task.mjs'
7
+ import createStreamThrottle from './_createStreamThrottle.mjs'
8
+ import { DEFAULT_SETTINGS, Abstract } from './_Abstract.mjs'
9
+ import { runTask } from './_runTask.mjs'
10
+ import { getAdaptersByRemote } from './_getAdaptersByRemote.mjs'
11
+ import { FullRemote } from './_vmRunners/FullRemote.mjs'
12
+ import { IncrementalRemote } from './_vmRunners/IncrementalRemote.mjs'
15
13
 
16
14
  const DEFAULT_REMOTE_VM_SETTINGS = {
17
15
  concurrency: 2,
@@ -27,7 +25,7 @@ const DEFAULT_REMOTE_VM_SETTINGS = {
27
25
  vmTimeout: 0,
28
26
  }
29
27
 
30
- exports.VmsRemote = class RemoteVmsBackupRunner extends Abstract {
28
+ export const VmsRemote = class RemoteVmsBackupRunner extends Abstract {
31
29
  _computeBaseSettings(config, job) {
32
30
  const baseSettings = { ...DEFAULT_SETTINGS }
33
31
  Object.assign(baseSettings, DEFAULT_REMOTE_VM_SETTINGS, config.defaultSettings, config.vm?.defaultSettings)
@@ -1,17 +1,15 @@
1
- 'use strict'
2
-
3
- const { asyncMapSettled } = require('@xen-orchestra/async-map')
4
- const Disposable = require('promise-toolbox/Disposable')
5
- const { limitConcurrency } = require('limit-concurrency-decorator')
6
-
7
- const { extractIdsFromSimplePattern } = require('../extractIdsFromSimplePattern.js')
8
- const { Task } = require('../Task.js')
9
- const createStreamThrottle = require('./_createStreamThrottle.js')
10
- const { DEFAULT_SETTINGS, Abstract } = require('./_Abstract.js')
11
- const { runTask } = require('./_runTask.js')
12
- const { getAdaptersByRemote } = require('./_getAdaptersByRemote.js')
13
- const { IncrementalXapi } = require('./_vmRunners/IncrementalXapi.js')
14
- const { FullXapi } = require('./_vmRunners/FullXapi.js')
1
+ import { asyncMapSettled } from '@xen-orchestra/async-map'
2
+ import Disposable from 'promise-toolbox/Disposable'
3
+ import { limitConcurrency } from 'limit-concurrency-decorator'
4
+
5
+ import { extractIdsFromSimplePattern } from '../extractIdsFromSimplePattern.mjs'
6
+ import { Task } from '../Task.mjs'
7
+ import createStreamThrottle from './_createStreamThrottle.mjs'
8
+ import { DEFAULT_SETTINGS, Abstract } from './_Abstract.mjs'
9
+ import { runTask } from './_runTask.mjs'
10
+ import { getAdaptersByRemote } from './_getAdaptersByRemote.mjs'
11
+ import { IncrementalXapi } from './_vmRunners/IncrementalXapi.mjs'
12
+ import { FullXapi } from './_vmRunners/FullXapi.mjs'
15
13
 
16
14
  const DEFAULT_XAPI_VM_SETTINGS = {
17
15
  bypassVdiChainsCheck: false,
@@ -36,7 +34,7 @@ const DEFAULT_XAPI_VM_SETTINGS = {
36
34
  vmTimeout: 0,
37
35
  }
38
36
 
39
- exports.VmsXapi = class VmsXapiBackupRunner extends Abstract {
37
+ export const VmsXapi = class VmsXapiBackupRunner extends Abstract {
40
38
  _computeBaseSettings(config, job) {
41
39
  const baseSettings = { ...DEFAULT_SETTINGS }
42
40
  Object.assign(baseSettings, DEFAULT_XAPI_VM_SETTINGS, config.defaultSettings, config.vm?.defaultSettings)
@@ -1,17 +1,15 @@
1
- 'use strict'
1
+ import Disposable from 'promise-toolbox/Disposable'
2
+ import pTimeout from 'promise-toolbox/timeout'
3
+ import { compileTemplate } from '@xen-orchestra/template'
4
+ import { runTask } from './_runTask.mjs'
5
+ import { RemoteTimeoutError } from './_RemoteTimeoutError.mjs'
2
6
 
3
- const Disposable = require('promise-toolbox/Disposable')
4
- const pTimeout = require('promise-toolbox/timeout')
5
- const { compileTemplate } = require('@xen-orchestra/template')
6
- const { runTask } = require('./_runTask.js')
7
- const { RemoteTimeoutError } = require('./_RemoteTimeoutError.js')
8
-
9
- exports.DEFAULT_SETTINGS = {
7
+ export const DEFAULT_SETTINGS = {
10
8
  getRemoteTimeout: 300e3,
11
9
  reportWhen: 'failure',
12
10
  }
13
11
 
14
- exports.Abstract = class AbstractRunner {
12
+ export const Abstract = class AbstractRunner {
15
13
  constructor({ config, getAdapter, getConnectedRecord, job, schedule }) {
16
14
  this._config = config
17
15
  this._getRecord = getConnectedRecord
@@ -1,16 +1,13 @@
1
- 'use strict'
1
+ import { asyncMap } from '@xen-orchestra/async-map'
2
2
 
3
- const { asyncMap } = require('@xen-orchestra/async-map')
3
+ import { DIR_XO_POOL_METADATA_BACKUPS } from '../RemoteAdapter.mjs'
4
+ import { forkStreamUnpipe } from './_forkStreamUnpipe.mjs'
5
+ import { formatFilenameDate } from '../_filenameDate.mjs'
6
+ import { Task } from '../Task.mjs'
4
7
 
5
- const { DIR_XO_POOL_METADATA_BACKUPS } = require('../RemoteAdapter.js')
6
- const { forkStreamUnpipe } = require('./_forkStreamUnpipe.js')
7
- const { formatFilenameDate } = require('../_filenameDate.js')
8
- const { Task } = require('../Task.js')
8
+ export const PATH_DB_DUMP = '/pool/xmldbdump'
9
9
 
10
- const PATH_DB_DUMP = '/pool/xmldbdump'
11
- exports.PATH_DB_DUMP = PATH_DB_DUMP
12
-
13
- exports.PoolMetadataBackup = class PoolMetadataBackup {
10
+ export class PoolMetadataBackup {
14
11
  constructor({ config, job, pool, remoteAdapters, schedule, settings }) {
15
12
  this._config = config
16
13
  this._job = job
@@ -1,8 +1,6 @@
1
- 'use strict'
2
- class RemoteTimeoutError extends Error {
1
+ export class RemoteTimeoutError extends Error {
3
2
  constructor(remoteId) {
4
3
  super('timeout while getting the remote ' + remoteId)
5
4
  this.remoteId = remoteId
6
5
  }
7
6
  }
8
- exports.RemoteTimeoutError = RemoteTimeoutError
@@ -1,13 +1,11 @@
1
- 'use strict'
1
+ import { asyncMap } from '@xen-orchestra/async-map'
2
+ import { join } from '@xen-orchestra/fs/path'
2
3
 
3
- const { asyncMap } = require('@xen-orchestra/async-map')
4
- const { join } = require('@xen-orchestra/fs/path')
4
+ import { DIR_XO_CONFIG_BACKUPS } from '../RemoteAdapter.mjs'
5
+ import { formatFilenameDate } from '../_filenameDate.mjs'
6
+ import { Task } from '../Task.mjs'
5
7
 
6
- const { DIR_XO_CONFIG_BACKUPS } = require('../RemoteAdapter.js')
7
- const { formatFilenameDate } = require('../_filenameDate.js')
8
- const { Task } = require('../Task.js')
9
-
10
- exports.XoMetadataBackup = class XoMetadataBackup {
8
+ export class XoMetadataBackup {
11
9
  constructor({ config, job, remoteAdapters, schedule, settings }) {
12
10
  this._config = config
13
11
  this._job = job
@@ -1,12 +1,10 @@
1
- 'use strict'
2
-
3
- const { pipeline } = require('node:stream')
4
- const { ThrottleGroup } = require('@kldzj/stream-throttle')
5
- const identity = require('lodash/identity.js')
1
+ import { pipeline } from 'node:stream'
2
+ import { ThrottleGroup } from '@kldzj/stream-throttle'
3
+ import identity from 'lodash/identity.js'
6
4
 
7
5
  const noop = Function.prototype
8
6
 
9
- module.exports = function createStreamThrottle(rate) {
7
+ export default function createStreamThrottle(rate) {
10
8
  if (rate === 0) {
11
9
  return identity
12
10
  }
@@ -1,14 +1,13 @@
1
- 'use strict'
1
+ import { createLogger } from '@xen-orchestra/log'
2
+ import { finished, PassThrough } from 'node:stream'
2
3
 
3
- const { finished, PassThrough } = require('node:stream')
4
-
5
- const { debug } = require('@xen-orchestra/log').createLogger('xo:backups:forkStreamUnpipe')
4
+ const { debug } = createLogger('xo:backups:forkStreamUnpipe')
6
5
 
7
6
  // create a new readable stream from an existing one which may be piped later
8
7
  //
9
8
  // in case of error in the new readable stream, it will simply be unpiped
10
9
  // from the original one
11
- exports.forkStreamUnpipe = function forkStreamUnpipe(source) {
10
+ export function forkStreamUnpipe(source) {
12
11
  const { forks = 0 } = source
13
12
  source.forks = forks + 1
14
13
 
@@ -1,9 +1,7 @@
1
- 'use strict'
2
- const getAdaptersByRemote = adapters => {
1
+ export function getAdaptersByRemote(adapters) {
3
2
  const adaptersByRemote = {}
4
3
  adapters.forEach(({ adapter, remoteId }) => {
5
4
  adaptersByRemote[remoteId] = adapter
6
5
  })
7
6
  return adaptersByRemote
8
7
  }
9
- exports.getAdaptersByRemote = getAdaptersByRemote
@@ -0,0 +1,5 @@
1
+ import { Task } from '../Task.mjs'
2
+
3
+ const noop = Function.prototype
4
+
5
+ export const runTask = (...args) => Task.run(...args).catch(noop) // errors are handled by logs
@@ -1,14 +1,12 @@
1
- 'use strict'
1
+ import { decorateMethodsWith } from '@vates/decorate-with'
2
+ import { defer } from 'golike-defer'
3
+ import { AbstractRemote } from './_AbstractRemote.mjs'
4
+ import { FullRemoteWriter } from '../_writers/FullRemoteWriter.mjs'
5
+ import { forkStreamUnpipe } from '../_forkStreamUnpipe.mjs'
6
+ import { watchStreamSize } from '../../_watchStreamSize.mjs'
7
+ import { Task } from '../../Task.mjs'
2
8
 
3
- const { decorateMethodsWith } = require('@vates/decorate-with')
4
- const { defer } = require('golike-defer')
5
- const { AbstractRemote } = require('./_AbstractRemote')
6
- const { FullRemoteWriter } = require('../_writers/FullRemoteWriter')
7
- const { forkStreamUnpipe } = require('../_forkStreamUnpipe')
8
- const { watchStreamSize } = require('../../_watchStreamSize')
9
- const { Task } = require('../../Task')
10
-
11
- class FullRemoteVmBackupRunner extends AbstractRemote {
9
+ export const FullRemote = class FullRemoteVmBackupRunner extends AbstractRemote {
12
10
  _getRemoteWriter() {
13
11
  return FullRemoteWriter
14
12
  }
@@ -47,7 +45,6 @@ class FullRemoteVmBackupRunner extends AbstractRemote {
47
45
  }
48
46
  }
49
47
 
50
- exports.FullRemote = FullRemoteVmBackupRunner
51
- decorateMethodsWith(FullRemoteVmBackupRunner, {
48
+ decorateMethodsWith(FullRemote, {
52
49
  _run: defer,
53
50
  })
@@ -1,16 +1,14 @@
1
- 'use strict'
1
+ import { createLogger } from '@xen-orchestra/log'
2
2
 
3
- const { createLogger } = require('@xen-orchestra/log')
4
-
5
- const { forkStreamUnpipe } = require('../_forkStreamUnpipe.js')
6
- const { FullRemoteWriter } = require('../_writers/FullRemoteWriter.js')
7
- const { FullXapiWriter } = require('../_writers/FullXapiWriter.js')
8
- const { watchStreamSize } = require('../../_watchStreamSize.js')
9
- const { AbstractXapi } = require('./_AbstractXapi.js')
3
+ import { forkStreamUnpipe } from '../_forkStreamUnpipe.mjs'
4
+ import { FullRemoteWriter } from '../_writers/FullRemoteWriter.mjs'
5
+ import { FullXapiWriter } from '../_writers/FullXapiWriter.mjs'
6
+ import { watchStreamSize } from '../../_watchStreamSize.mjs'
7
+ import { AbstractXapi } from './_AbstractXapi.mjs'
10
8
 
11
9
  const { debug } = createLogger('xo:backups:FullXapiVmBackup')
12
10
 
13
- exports.FullXapi = class FullXapiVmBackupRunner extends AbstractXapi {
11
+ export const FullXapi = class FullXapiVmBackupRunner extends AbstractXapi {
14
12
  _getWriters() {
15
13
  return [FullRemoteWriter, FullXapiWriter]
16
14
  }
@@ -1,15 +1,14 @@
1
- 'use strict'
2
- const assert = require('node:assert')
1
+ import { asyncEach } from '@vates/async-each'
2
+ import { decorateMethodsWith } from '@vates/decorate-with'
3
+ import { defer } from 'golike-defer'
4
+ import assert from 'node:assert'
5
+ import isVhdDifferencingDisk from 'vhd-lib/isVhdDifferencingDisk.js'
6
+ import mapValues from 'lodash/mapValues.js'
3
7
 
4
- const { decorateMethodsWith } = require('@vates/decorate-with')
5
- const { defer } = require('golike-defer')
6
- const { mapValues } = require('lodash')
7
- const { Task } = require('../../Task')
8
- const { AbstractRemote } = require('./_AbstractRemote')
9
- const { IncrementalRemoteWriter } = require('../_writers/IncrementalRemoteWriter')
10
- const { forkDeltaExport } = require('./_forkDeltaExport')
11
- const isVhdDifferencingDisk = require('vhd-lib/isVhdDifferencingDisk')
12
- const { asyncEach } = require('@vates/async-each')
8
+ import { AbstractRemote } from './_AbstractRemote.mjs'
9
+ import { forkDeltaExport } from './_forkDeltaExport.mjs'
10
+ import { IncrementalRemoteWriter } from '../_writers/IncrementalRemoteWriter.mjs'
11
+ import { Task } from '../../Task.mjs'
13
12
 
14
13
  class IncrementalRemoteVmBackupRunner extends AbstractRemote {
15
14
  _getRemoteWriter() {
@@ -61,7 +60,7 @@ class IncrementalRemoteVmBackupRunner extends AbstractRemote {
61
60
  }
62
61
  }
63
62
 
64
- exports.IncrementalRemote = IncrementalRemoteVmBackupRunner
63
+ export const IncrementalRemote = IncrementalRemoteVmBackupRunner
65
64
  decorateMethodsWith(IncrementalRemoteVmBackupRunner, {
66
65
  _run: defer,
67
66
  })
@@ -1,28 +1,26 @@
1
- 'use strict'
2
-
3
- const findLast = require('lodash/findLast.js')
4
- const keyBy = require('lodash/keyBy.js')
5
- const mapValues = require('lodash/mapValues.js')
6
- const vhdStreamValidator = require('vhd-lib/vhdStreamValidator.js')
7
- const { asyncMap } = require('@xen-orchestra/async-map')
8
- const { createLogger } = require('@xen-orchestra/log')
9
- const { pipeline } = require('node:stream')
10
-
11
- const { IncrementalRemoteWriter } = require('../_writers/IncrementalRemoteWriter.js')
12
- const { IncrementalXapiWriter } = require('../_writers/IncrementalXapiWriter.js')
13
- const { exportIncrementalVm } = require('../../_incrementalVm.js')
14
- const { Task } = require('../../Task.js')
15
- const { watchStreamSize } = require('../../_watchStreamSize.js')
16
- const { AbstractXapi } = require('./_AbstractXapi.js')
17
- const { forkDeltaExport } = require('./_forkDeltaExport.js')
18
- const isVhdDifferencingDisk = require('vhd-lib/isVhdDifferencingDisk')
19
- const { asyncEach } = require('@vates/async-each')
1
+ import { asyncEach } from '@vates/async-each'
2
+ import { asyncMap } from '@xen-orchestra/async-map'
3
+ import { createLogger } from '@xen-orchestra/log'
4
+ import { pipeline } from 'node:stream'
5
+ import findLast from 'lodash/findLast.js'
6
+ import isVhdDifferencingDisk from 'vhd-lib/isVhdDifferencingDisk.js'
7
+ import keyBy from 'lodash/keyBy.js'
8
+ import mapValues from 'lodash/mapValues.js'
9
+ import vhdStreamValidator from 'vhd-lib/vhdStreamValidator.js'
10
+
11
+ import { AbstractXapi } from './_AbstractXapi.mjs'
12
+ import { exportIncrementalVm } from '../../_incrementalVm.mjs'
13
+ import { forkDeltaExport } from './_forkDeltaExport.mjs'
14
+ import { IncrementalRemoteWriter } from '../_writers/IncrementalRemoteWriter.mjs'
15
+ import { IncrementalXapiWriter } from '../_writers/IncrementalXapiWriter.mjs'
16
+ import { Task } from '../../Task.mjs'
17
+ import { watchStreamSize } from '../../_watchStreamSize.mjs'
20
18
 
21
19
  const { debug } = createLogger('xo:backups:IncrementalXapiVmBackup')
22
20
 
23
21
  const noop = Function.prototype
24
22
 
25
- exports.IncrementalXapi = class IncrementalXapiVmBackupRunner extends AbstractXapi {
23
+ export const IncrementalXapi = class IncrementalXapiVmBackupRunner extends AbstractXapi {
26
24
  _getWriters() {
27
25
  return [IncrementalRemoteWriter, IncrementalXapiWriter]
28
26
  }
@@ -1,8 +1,6 @@
1
- 'use strict'
2
-
3
- const { asyncMap } = require('@xen-orchestra/async-map')
4
- const { createLogger } = require('@xen-orchestra/log')
5
- const { Task } = require('../../Task.js')
1
+ import { asyncMap } from '@xen-orchestra/async-map'
2
+ import { createLogger } from '@xen-orchestra/log'
3
+ import { Task } from '../../Task.mjs'
6
4
 
7
5
  const { debug, warn } = createLogger('xo:backups:AbstractVmRunner')
8
6
 
@@ -19,7 +17,7 @@ const asyncEach = async (iterable, fn, thisArg = iterable) => {
19
17
  }
20
18
  }
21
19
 
22
- exports.Abstract = class AbstractVmBackupRunner {
20
+ export const Abstract = class AbstractVmBackupRunner {
23
21
  // calls fn for each function, warns of any errors, and throws only if there are no writers left
24
22
  async _callWriters(fn, step, parallel = true) {
25
23
  const writers = this._writers
@@ -1,11 +1,11 @@
1
- 'use strict'
2
- const { Abstract } = require('./_Abstract')
1
+ import { asyncEach } from '@vates/async-each'
2
+ import { Disposable } from 'promise-toolbox'
3
3
 
4
- const { getVmBackupDir } = require('../../_getVmBackupDir')
5
- const { asyncEach } = require('@vates/async-each')
6
- const { Disposable } = require('promise-toolbox')
4
+ import { getVmBackupDir } from '../../_getVmBackupDir.mjs'
7
5
 
8
- exports.AbstractRemote = class AbstractRemoteVmBackupRunner extends Abstract {
6
+ import { Abstract } from './_Abstract.mjs'
7
+
8
+ export const AbstractRemote = class AbstractRemoteVmBackupRunner extends Abstract {
9
9
  constructor({
10
10
  config,
11
11
  job,
@@ -1,18 +1,16 @@
1
- 'use strict'
2
-
3
- const assert = require('assert')
4
- const groupBy = require('lodash/groupBy.js')
5
- const ignoreErrors = require('promise-toolbox/ignoreErrors')
6
- const { asyncMap } = require('@xen-orchestra/async-map')
7
- const { decorateMethodsWith } = require('@vates/decorate-with')
8
- const { defer } = require('golike-defer')
9
- const { formatDateTime } = require('@xen-orchestra/xapi')
10
-
11
- const { getOldEntries } = require('../../_getOldEntries.js')
12
- const { Task } = require('../../Task.js')
13
- const { Abstract } = require('./_Abstract.js')
14
-
15
- class AbstractXapiVmBackupRunner extends Abstract {
1
+ import assert from 'node:assert'
2
+ import groupBy from 'lodash/groupBy.js'
3
+ import ignoreErrors from 'promise-toolbox/ignoreErrors'
4
+ import { asyncMap } from '@xen-orchestra/async-map'
5
+ import { decorateMethodsWith } from '@vates/decorate-with'
6
+ import { defer } from 'golike-defer'
7
+ import { formatDateTime } from '@xen-orchestra/xapi'
8
+
9
+ import { getOldEntries } from '../../_getOldEntries.mjs'
10
+ import { Task } from '../../Task.mjs'
11
+ import { Abstract } from './_Abstract.mjs'
12
+
13
+ export const AbstractXapi = class AbstractXapiVmBackupRunner extends Abstract {
16
14
  constructor({
17
15
  config,
18
16
  getSnapshotNameLabel,
@@ -271,8 +269,7 @@ class AbstractXapiVmBackupRunner extends Abstract {
271
269
  await this._healthCheck()
272
270
  }
273
271
  }
274
- exports.AbstractXapi = AbstractXapiVmBackupRunner
275
272
 
276
- decorateMethodsWith(AbstractXapiVmBackupRunner, {
273
+ decorateMethodsWith(AbstractXapi, {
277
274
  run: defer,
278
275
  })
@@ -0,0 +1,11 @@
1
+ import mapValues from 'lodash/mapValues.js'
2
+
3
+ import { forkStreamUnpipe } from '../_forkStreamUnpipe.mjs'
4
+
5
+ export function forkDeltaExport(deltaExport) {
6
+ return Object.create(deltaExport, {
7
+ streams: {
8
+ value: mapValues(deltaExport.streams, forkStreamUnpipe),
9
+ },
10
+ })
11
+ }
@@ -1,13 +1,11 @@
1
- 'use strict'
1
+ import { formatFilenameDate } from '../../_filenameDate.mjs'
2
+ import { getOldEntries } from '../../_getOldEntries.mjs'
3
+ import { Task } from '../../Task.mjs'
2
4
 
3
- const { formatFilenameDate } = require('../../_filenameDate.js')
4
- const { getOldEntries } = require('../../_getOldEntries.js')
5
- const { Task } = require('../../Task.js')
5
+ import { MixinRemoteWriter } from './_MixinRemoteWriter.mjs'
6
+ import { AbstractFullWriter } from './_AbstractFullWriter.mjs'
6
7
 
7
- const { MixinRemoteWriter } = require('./_MixinRemoteWriter.js')
8
- const { AbstractFullWriter } = require('./_AbstractFullWriter.js')
9
-
10
- exports.FullRemoteWriter = class FullRemoteWriter extends MixinRemoteWriter(AbstractFullWriter) {
8
+ export class FullRemoteWriter extends MixinRemoteWriter(AbstractFullWriter) {
11
9
  constructor(props) {
12
10
  super(props)
13
11
 
@@ -1,18 +1,16 @@
1
- 'use strict'
1
+ import ignoreErrors from 'promise-toolbox/ignoreErrors'
2
+ import { asyncMap, asyncMapSettled } from '@xen-orchestra/async-map'
3
+ import { formatDateTime } from '@xen-orchestra/xapi'
2
4
 
3
- const ignoreErrors = require('promise-toolbox/ignoreErrors')
4
- const { asyncMap, asyncMapSettled } = require('@xen-orchestra/async-map')
5
- const { formatDateTime } = require('@xen-orchestra/xapi')
5
+ import { formatFilenameDate } from '../../_filenameDate.mjs'
6
+ import { getOldEntries } from '../../_getOldEntries.mjs'
7
+ import { Task } from '../../Task.mjs'
6
8
 
7
- const { formatFilenameDate } = require('../../_filenameDate.js')
8
- const { getOldEntries } = require('../../_getOldEntries.js')
9
- const { Task } = require('../../Task.js')
9
+ import { AbstractFullWriter } from './_AbstractFullWriter.mjs'
10
+ import { MixinXapiWriter } from './_MixinXapiWriter.mjs'
11
+ import { listReplicatedVms } from './_listReplicatedVms.mjs'
10
12
 
11
- const { AbstractFullWriter } = require('./_AbstractFullWriter.js')
12
- const { MixinXapiWriter } = require('./_MixinXapiWriter.js')
13
- const { listReplicatedVms } = require('./_listReplicatedVms.js')
14
-
15
- exports.FullXapiWriter = class FullXapiWriter extends MixinXapiWriter(AbstractFullWriter) {
13
+ export class FullXapiWriter extends MixinXapiWriter(AbstractFullWriter) {
16
14
  constructor(props) {
17
15
  super(props)
18
16
 
@@ -1,29 +1,27 @@
1
- 'use strict'
2
-
3
- const assert = require('assert')
4
- const mapValues = require('lodash/mapValues.js')
5
- const ignoreErrors = require('promise-toolbox/ignoreErrors')
6
- const { asyncEach } = require('@vates/async-each')
7
- const { asyncMap } = require('@xen-orchestra/async-map')
8
- const { chainVhd, checkVhdChain, openVhd, VhdAbstract } = require('vhd-lib')
9
- const { createLogger } = require('@xen-orchestra/log')
10
- const { decorateClass } = require('@vates/decorate-with')
11
- const { defer } = require('golike-defer')
12
- const { dirname } = require('path')
13
-
14
- const { formatFilenameDate } = require('../../_filenameDate.js')
15
- const { getOldEntries } = require('../../_getOldEntries.js')
16
- const { Task } = require('../../Task.js')
17
-
18
- const { MixinRemoteWriter } = require('./_MixinRemoteWriter.js')
19
- const { AbstractIncrementalWriter } = require('./_AbstractIncrementalWriter.js')
20
- const { checkVhd } = require('./_checkVhd.js')
21
- const { packUuid } = require('./_packUuid.js')
22
- const { Disposable } = require('promise-toolbox')
1
+ import assert from 'node:assert'
2
+ import mapValues from 'lodash/mapValues.js'
3
+ import ignoreErrors from 'promise-toolbox/ignoreErrors'
4
+ import { asyncEach } from '@vates/async-each'
5
+ import { asyncMap } from '@xen-orchestra/async-map'
6
+ import { chainVhd, checkVhdChain, openVhd, VhdAbstract } from 'vhd-lib'
7
+ import { createLogger } from '@xen-orchestra/log'
8
+ import { decorateClass } from '@vates/decorate-with'
9
+ import { defer } from 'golike-defer'
10
+ import { dirname } from 'node:path'
11
+
12
+ import { formatFilenameDate } from '../../_filenameDate.mjs'
13
+ import { getOldEntries } from '../../_getOldEntries.mjs'
14
+ import { Task } from '../../Task.mjs'
15
+
16
+ import { MixinRemoteWriter } from './_MixinRemoteWriter.mjs'
17
+ import { AbstractIncrementalWriter } from './_AbstractIncrementalWriter.mjs'
18
+ import { checkVhd } from './_checkVhd.mjs'
19
+ import { packUuid } from './_packUuid.mjs'
20
+ import { Disposable } from 'promise-toolbox'
23
21
 
24
22
  const { warn } = createLogger('xo:backups:DeltaBackupWriter')
25
23
 
26
- class IncrementalRemoteWriter extends MixinRemoteWriter(AbstractIncrementalWriter) {
24
+ export class IncrementalRemoteWriter extends MixinRemoteWriter(AbstractIncrementalWriter) {
27
25
  async checkBaseVdis(baseUuidToSrcVdi) {
28
26
  const { handler } = this._adapter
29
27
  const adapter = this._adapter
@@ -238,6 +236,6 @@ class IncrementalRemoteWriter extends MixinRemoteWriter(AbstractIncrementalWrite
238
236
  // TODO: run cleanup?
239
237
  }
240
238
  }
241
- exports.IncrementalRemoteWriter = decorateClass(IncrementalRemoteWriter, {
239
+ decorateClass(IncrementalRemoteWriter, {
242
240
  _transfer: defer,
243
241
  })