From 861eafd88da3a74e72c23e1bcf86fa596de38e5a Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 19 Nov 2014 11:52:40 +0000 Subject: [PATCH] Handle reconnect logic better to (hopefully) avoid duplicate connections --- libraries/redis-wrapper/index.coffee | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/libraries/redis-wrapper/index.coffee b/libraries/redis-wrapper/index.coffee index 04eca38450..581c419469 100644 --- a/libraries/redis-wrapper/index.coffee +++ b/libraries/redis-wrapper/index.coffee @@ -41,8 +41,17 @@ module.exports = RedisSharelatex = reconnectIfInactive = () -> timeSinceLastHeartbeat = Date.now() - lastHeartbeat if timeSinceLastHeartbeat > reconnectAfter - console.warn "No heartbeat for #{timeSinceLastHeartbeat}ms, reconnecting" - sub.connection_gone("no heartbeat for #{timeSinceLastHeartbeat}ms") + console.warn "[#{new Date()}] No heartbeat for #{timeSinceLastHeartbeat}ms on #{heartbeatChannel}, reconnecting" + # If the client realises it isn't connected then will be trying to + # restablish the connection, so there's nothing for us to do. If + # it still thinks it's connected, then disconnect it and start to reconnect. + if sub.connected + sub.end() + # We ended the connection, but want to start it up again, so set + # the internal closing variable: + sub.closing = false + # Trigger the reconnect: + sub.connection_gone("no heartbeat for #{timeSinceLastHeartbeat}ms") # Reset timer after triggering a reconnect to avoid potential cascading failure. lastHeartbeat = Date.now()