From 942ddfa742974978f17e9da70d80d720e32206e3 Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Thu, 16 Aug 2018 14:39:24 +0200 Subject: [PATCH] feat(xo-server/remotes): sync on use (#3320) Fixes #2852 --- CHANGELOG.md | 1 + packages/xo-server/src/xo-mixins/remotes.js | 30 ++++++++++++--------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f44a13c5..19bb4c4bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - [Backup NG form] Fix schedule's name overridden with undefined if it's not been edited [#3286](https://github.com/vatesfr/xen-orchestra/issues/3286) (PR [#3288](https://github.com/vatesfr/xen-orchestra/pull/3288)) - [Remotes] Don't change `enabled` state on errors (PR [#3318](https://github.com/vatesfr/xen-orchestra/pull/3318)) +- [Remotes] Auto-reconnect on use if necessary [#2852](https://github.com/vatesfr/xen-orchestra/issues/2852) (PR [#3320](https://github.com/vatesfr/xen-orchestra/pull/3320)) ### Released packages diff --git a/packages/xo-server/src/xo-mixins/remotes.js b/packages/xo-server/src/xo-mixins/remotes.js index 83e5ac951..77549d990 100644 --- a/packages/xo-server/src/xo-mixins/remotes.js +++ b/packages/xo-server/src/xo-mixins/remotes.js @@ -59,6 +59,15 @@ export default class { if (handler === undefined) { handler = handlers[id] = getHandler(remote) } + + try { + await handler.sync() + ignoreErrors.call(this._updateRemote(id, { error: '' })) + } catch (error) { + ignoreErrors.call(this._updateRemote(id, { error: error.message })) + throw error + } + return handler } @@ -89,20 +98,15 @@ export default class { return /* await */ this.updateRemote(remote.get('id'), { enabled: true }) } - async updateRemote (id, { name, url, enabled }) { - const remote = await this._updateRemote(id, { name, url, enabled }) - - // force refreshing the handler - delete this._handlers[id] - const handler = await this.getRemoteHandler(remote, true) - - let error = '' - try { - await handler.sync() - } catch (error_) { - error = error_.message + updateRemote (id, { name, url, enabled }) { + const handlers = this._handlers + const handler = handlers[id] + if (handler !== undefined) { + delete this._handlers[id] + ignoreErrors.call(handler.forget()) } - return this._updateRemote(id, { error }) + + return this._updateRemote(id, { name, url, enabled }) } @synchronized()