Fix incorrect retries if multiple HTTP.request() calls get 500s
https://forums.zotero.org/discussion/comment/425814/#Comment_425814 The passed intervals array was modified, so after a request() got a 500, subsequent calls would start with longer delays and eventually start retrying immediately.
This commit is contained in:
parent
4fbb89a588
commit
21777af980
2 changed files with 24 additions and 0 deletions
|
@ -853,6 +853,7 @@ Zotero.Utilities.Internal = {
|
||||||
var delay;
|
var delay;
|
||||||
var totalTime = 0;
|
var totalTime = 0;
|
||||||
var last = false;
|
var last = false;
|
||||||
|
intervals = intervals.slice();
|
||||||
while (true) {
|
while (true) {
|
||||||
let interval = intervals.shift();
|
let interval = intervals.shift();
|
||||||
if (interval) {
|
if (interval) {
|
||||||
|
|
|
@ -260,6 +260,29 @@ describe("Zotero.HTTP", function () {
|
||||||
assert.approximately(delayStub.args[0][0], 5 * 1000, 5);
|
assert.approximately(delayStub.args[0][0], 5 * 1000, 5);
|
||||||
assert.approximately(delayStub.args[1][0], 10 * 1000, 5);
|
assert.approximately(delayStub.args[1][0], 10 * 1000, 5);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should start with first interval on new request() call", async function () {
|
||||||
|
var called = 0;
|
||||||
|
server.respond(function (req) {
|
||||||
|
if (req.method == "GET" && req.url.startsWith(baseURL + "error")) {
|
||||||
|
if (called < 1) {
|
||||||
|
req.respond(500, {}, "");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
req.respond(200, {}, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
called++;
|
||||||
|
});
|
||||||
|
spy = sinon.spy(Zotero.HTTP, "_requestInternal");
|
||||||
|
var errorDelayIntervals = [20];
|
||||||
|
await Zotero.HTTP.request("GET", baseURL + "error1", { errorDelayIntervals })
|
||||||
|
called = 0;
|
||||||
|
await Zotero.HTTP.request("GET", baseURL + "error2", { errorDelayIntervals }),
|
||||||
|
assert.equal(4, spy.callCount);
|
||||||
|
assert.equal(delayStub.args[0][0], 20);
|
||||||
|
assert.equal(delayStub.args[1][0], 20);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue