Let the client take care of reconnecting only when the stream is actually ended

This commit is contained in:
James Allen 2014-11-19 12:30:10 +00:00
parent 861eafd88d
commit 42cbaecbe0

View file

@ -41,17 +41,20 @@ module.exports = RedisSharelatex =
reconnectIfInactive = () ->
timeSinceLastHeartbeat = Date.now() - lastHeartbeat
if timeSinceLastHeartbeat > reconnectAfter
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
console.warn "[#{new Date()}] No heartbeat for #{timeSinceLastHeartbeat}ms on #{heartbeatChannel}, reconnecting"
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")
# Trigger the reconnect (automatically triggered by sub.end() with closing = false):
# sub.connection_gone("no heartbeat for #{timeSinceLastHeartbeat}ms")
else
console.warn "[#{new Date()}] No heartbeat for #{timeSinceLastHeartbeat}ms on #{heartbeatChannel}, but not reconnecting (already reconnecting)"
# Reset timer after triggering a reconnect to avoid potential cascading failure.
lastHeartbeat = Date.now()