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

Reply via email to