randomize sync interval to avoid infinite deadlocks
This commit is contained in:
parent
440a9f4763
commit
c3a99ff6a0
|
@ -28,6 +28,7 @@ const syncMan = (() => {
|
||||||
login: false,
|
login: false,
|
||||||
};
|
};
|
||||||
let lastError = null;
|
let lastError = null;
|
||||||
|
let lastInterval = Math.random();
|
||||||
let ctrl;
|
let ctrl;
|
||||||
let currentDrive;
|
let currentDrive;
|
||||||
/** @type {Promise|boolean} will be `true` to avoid wasting a microtask tick on each `await` */
|
/** @type {Promise|boolean} will be `true` to avoid wasting a microtask tick on each `await` */
|
||||||
|
@ -40,9 +41,14 @@ const syncMan = (() => {
|
||||||
{runNow: true});
|
{runNow: true});
|
||||||
});
|
});
|
||||||
|
|
||||||
chrome.alarms.onAlarm.addListener(info => {
|
chrome.alarms.onAlarm.addListener(async ({name}) => {
|
||||||
if (info.name === 'syncNow') {
|
if (name === 'syncNow') {
|
||||||
syncMan.syncNow();
|
await syncMan.syncNow();
|
||||||
|
/* We want to fire the alarm once per SYNC_INTERVAL at a random point within the range,
|
||||||
|
* so the new delay includes the leftover portion from the last range. */
|
||||||
|
const r = Math.random();
|
||||||
|
schedule(SYNC_DELAY + SYNC_INTERVAL * (1 - lastInterval + r));
|
||||||
|
lastInterval = r;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -248,7 +254,6 @@ const syncMan = (() => {
|
||||||
function schedule(delay = SYNC_DELAY) {
|
function schedule(delay = SYNC_DELAY) {
|
||||||
chrome.alarms.create('syncNow', {
|
chrome.alarms.create('syncNow', {
|
||||||
delayInMinutes: delay,
|
delayInMinutes: delay,
|
||||||
periodInMinutes: SYNC_INTERVAL,
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user