feat(xo-server/patching): fewer XCP-ng updater plugin requests (#4477)

Fixes #4358
This commit is contained in:
Nicolas Raynaud
2019-09-05 02:58:54 -07:00
committed by Pierre Donias
parent 171710b5e8
commit 03eb2d81f0
2 changed files with 27 additions and 14 deletions

View File

@@ -14,6 +14,7 @@
- [PBD] Obfuscate cifs password from device config [#4384](https://github.com/vatesfr/xen-orchestra/issues/4384) (PR [#4401](https://github.com/vatesfr/xen-orchestra/pull/4401))
- [XOSAN] Fix "invalid parameters" error on creating a SR (PR [#4478](https://github.com/vatesfr/xen-orchestra/pull/4478))
- [Patching] Avoid overloading XCP-ng by reducing the frequency of yum update checks [#4358](https://github.com/vatesfr/xen-orchestra/issues/4358) (PR [#4477](https://github.com/vatesfr/xen-orchestra/pull/4477))
> Users must be able to say: “I had this issue, happy to know it's fixed”

View File

@@ -6,6 +6,7 @@ import { filter, find, pickBy, some } from 'lodash'
import ensureArray from '../../_ensureArray'
import { debounce } from '../../decorators'
import debounceWithKey from '../../_pDebounceWithKey'
import { forEach, mapFilter, mapToArray, parseXml } from '../../utils'
import { extractOpaqueRef, useUpdateSystem } from '../utils'
@@ -35,6 +36,28 @@ const log = createLogger('xo:xapi')
const _isXcp = host => host.software_version.product_brand === 'XCP-ng'
const XCP_NG_DEBOUNCE_TIME_MS = 60000
// list all yum updates available for a XCP-ng host
// (hostObject) → { uuid: patchObject }
async function _listXcpUpdates(host) {
return JSON.parse(
await this.call(
'host.call_plugin',
host.$ref,
'updater.py',
'check_update',
{}
)
)
}
const _listXcpUpdateDebounced = debounceWithKey(
_listXcpUpdates,
XCP_NG_DEBOUNCE_TIME_MS,
host => host.$ref
)
// =============================================================================
export default {
@@ -141,19 +164,8 @@ export default {
// LIST ----------------------------------------------------------------------
// list all yum updates available for a XCP-ng host
// (hostObject) → { uuid: patchObject }
async _listXcpUpdates(host) {
return JSON.parse(
await this.call(
'host.call_plugin',
host.$ref,
'updater.py',
'check_update',
{}
)
)
},
_listXcpUpdates,
_listXcpUpdateDebounced,
// list all patches provided by Citrix for this host version regardless
// of if they're installed or not
@@ -306,7 +318,7 @@ export default {
listMissingPatches(hostId) {
const host = this.getObject(hostId)
return _isXcp(host)
? this._listXcpUpdates(host)
? this._listXcpUpdateDebounced(host)
: // TODO: list paid patches of free hosts as well so the UI can show them
this._listInstallablePatches(host)
},