fix(cron): prevent early runs (#4626)

Fixes #4625
This commit is contained in:
Julien Fontanet
2019-10-25 10:22:24 +02:00
committed by GitHub
parent a1a53bb285
commit 0525fc5909
2 changed files with 17 additions and 6 deletions

View File

@@ -5,14 +5,21 @@ import parse from './parse'
const MAX_DELAY = 2 ** 31 - 1
function nextDelay(schedule) {
const now = schedule._createDate()
return next(schedule._schedule, now) - now
}
class Job {
constructor(schedule, fn) {
let scheduledDate
const wrapper = () => {
const now = Date.now()
if (scheduledDate > now) {
// we're early, delay
//
// no need to check _isEnabled, we're just delaying the existing timeout
//
// see https://github.com/vatesfr/xen-orchestra/issues/4625
this._timeout = setTimeout(wrapper, scheduledDate - now)
return
}
this._isRunning = true
let result
@@ -32,7 +39,9 @@ class Job {
this._isRunning = false
if (this._isEnabled) {
const delay = nextDelay(schedule)
const now = Date.now()
scheduledDate = +schedule._createDate()
const delay = scheduledDate - now
this._timeout =
delay < MAX_DELAY
? setTimeout(wrapper, delay)

View File

@@ -24,6 +24,7 @@
> Users must be able to say: “I had this issue, happy to know it's fixed”
- [SR] Fix `[object HTMLInputElement]` name after re-attaching a SR [#4546](https://github.com/vatesfr/xen-orchestra/issues/4546) (PR [#4550](https://github.com/vatesfr/xen-orchestra/pull/4550))
- [Schedules] Prevent double runs [#4625](https://github.com/vatesfr/xen-orchestra/issues/4625) (PR [#4626](https://github.com/vatesfr/xen-orchestra/pull/4626))
### Released packages
@@ -32,6 +33,7 @@
>
> Rule of thumb: add packages on top.
- @xen-orchestra/cron v1.0.5
- xo-server-transport-icinga2 v0.1.0
- xo-server-sdn-controller v0.3.1
- xo-server v5.51.0