loleaflet/js/global.js | 50 ++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-)
New commits: commit e77e689e10bbb86ee52f357e70947f6142bd886b Author: Michael Meeks <michael.me...@collabora.com> AuthorDate: Tue Jun 9 11:29:11 2020 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Tue Jun 9 12:47:33 2020 +0200 Proxy: detect un-responsive sockets & close after 30secs. Also: + fix double poll timer in error + remove & rename incorrect interval timer names Change-Id: Idfae44c0a388312b248c78fc9ad04fe3725990b6 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/95910 Tested-by: Jenkins Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js index c6590389b..6a0bd23df 100644 --- a/loleaflet/js/global.js +++ b/loleaflet/js/global.js @@ -350,14 +350,16 @@ }; this.sendQueue = ''; this._signalErrorClose = function() { + clearInterval(this.pollInterval); + clearTimeout(this.delaySession); + this.pollInterval = undefined; + this.delaySession = undefined; + if (that.readyState < 3) { this.onerror(); this.onclose(); } - clearInterval(this.waitInterval); - clearTimeout(this.delaySession); - this.waitInterval = undefined; this.sessionId = 'open'; this.inSerial = 0; this.outSerial = 0; @@ -365,9 +367,14 @@ this.openInflight = 0; this.readyState = 3; // CLOSED }; + // For those who think that long-running sockets are a + // better way to wait: you're so right. However, each + // consumes a scarce server worker thread while it waits, + // so ... back in the real world: this._setPollInterval = function(intervalMs) { - clearInterval(that.pollInterval); - that.pollInterval = setInterval(that.doSend, intervalMs); + clearInterval(this.pollInterval); + if (this.readyState === 1) + this.pollInterval = setInterval(this.doSend, intervalMs); }, this.doSend = function () { if (that.sessionId === 'open') @@ -388,6 +395,11 @@ console.debug('High latency connection - too much in-flight, throttling to ' + that.curPollMs + ' ms.'); that._setPollInterval(that.curPollMs); } + else if (performance.now() - that.lastDataTimestamp > 30 * 1000) + { + console.debug('Close connection after no response for 30secs'); + that._signalErrorClose(); + } else console.debug('High latency connection - too much in-flight, pausing.'); return; @@ -490,12 +502,7 @@ that.sessionId = this.responseText; that.readyState = 1; that.onopen(); - - // For those who think that long-running sockets are a - // better way to wait: you're so right. However, each - // consumes a scarce server worker thread while it waits, - // so ... back in the real world: - that.pollInterval = setInterval(that.doSend, that.curPollMs); + that._setPollInterval(that.curPollMs); } }); req.addEventListener('loadend', function() { @@ -540,9 +547,9 @@ console.debug('proxy: close socket'); this.readyState = 3; this.onclose(); - clearInterval(this.waitInterval); + clearInterval(this.pollInterval); clearTimeout(this.delaySession); - this.waitInterval = undefined; + this.pollInterval = undefined; if (oldState === 1) // was open this.sendCloseMsg(this.unloading); this.sessionId = 'open'; commit 80d8018b40ff893ff8d2cb0865dd827455506a1a Author: Michael Meeks <michael.me...@collabora.com> AuthorDate: Tue Jun 9 10:44:30 2020 +0100 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Tue Jun 9 12:47:28 2020 +0200 Proxy: don't implement a magic re-connecting socket. Websockets don't magically re-connect, so we shouldn't either. Also avoid starting our send interval timer until we've opened to simplify. Change-Id: Id71049da2d4b4d0ac2f38a3d7410f2446d04f0b1 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/95906 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Tested-by: Jenkins Reviewed-by: Michael Meeks <michael.me...@collabora.com> diff --git a/loleaflet/js/global.js b/loleaflet/js/global.js index 0cafa649c..c6590389b 100644 --- a/loleaflet/js/global.js +++ b/loleaflet/js/global.js @@ -354,15 +354,15 @@ { this.onerror(); this.onclose(); - clearInterval(this.waitInterval); - clearTimeout(this.delaySession); - this.waitInterval = undefined; - this.sessionId = 'open'; - this.inSerial = 0; - this.outSerial = 0; - this.msgInflight = 0; - this.openInflight = 0; } + clearInterval(this.waitInterval); + clearTimeout(this.delaySession); + this.waitInterval = undefined; + this.sessionId = 'open'; + this.inSerial = 0; + this.outSerial = 0; + this.msgInflight = 0; + this.openInflight = 0; this.readyState = 3; // CLOSED }; this._setPollInterval = function(intervalMs) { @@ -373,10 +373,7 @@ if (that.sessionId === 'open') { if (that.readyState === 3) - { - console.debug('Session closed, opening a new one.'); - that.getSessionId(); - } + console.debug('Error: sending on closed socket'); return; } @@ -488,11 +485,17 @@ console.debug('Error: failed to fetch session id! error: ' + this.status); that._signalErrorClose(); } - else + else // we connected - lets get going ... { that.sessionId = this.responseText; that.readyState = 1; that.onopen(); + + // For those who think that long-running sockets are a + // better way to wait: you're so right. However, each + // consumes a scarce server worker thread while it waits, + // so ... back in the real world: + that.pollInterval = setInterval(that.doSend, that.curPollMs); } }); req.addEventListener('loadend', function() { @@ -555,12 +558,6 @@ // queue fetch of session id. this.getSessionId(); - - // For those who think that long-running sockets are a - // better way to wait: you're so right. However, each - // consumes a scarce server worker thread while it waits, - // so ... back in the real world: - this.pollInterval = setInterval(this.doSend, this.curPollMs); }; if (global.socketProxy) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits