Selaa lähdekoodia

Merge pull request #37 from sharelatex/ho-continual-pub-sub-traffic

setup continualPubsubTraffic to keep pub sub happy
Henry Oswald 7 vuotta sitten
vanhempi
sitoutus
5119db43a7

+ 25 - 0
services/real-time/app.coffee

@@ -1,6 +1,7 @@
 Metrics = require("metrics-sharelatex")
 Metrics = require("metrics-sharelatex")
 Settings = require "settings-sharelatex"
 Settings = require "settings-sharelatex"
 Metrics.initialize(Settings.appName or "real-time")
 Metrics.initialize(Settings.appName or "real-time")
+async = require("async")
 
 
 logger = require "logger-sharelatex"
 logger = require "logger-sharelatex"
 logger.initialize("real-time")
 logger.initialize("real-time")
@@ -115,3 +116,27 @@ if Settings.forceDrainMsDelay?
 				logger.log signal: signal, "received interrupt, cleaning up"
 				logger.log signal: signal, "received interrupt, cleaning up"
 				shutdownCleanly(signal)
 				shutdownCleanly(signal)
 				forceDrain()
 				forceDrain()
+
+
+
+if Settings.continualPubsubTraffic
+	console.log "continualPubsubTraffic enabled"
+
+	pubSubClient = redis.createClient(Settings.redis.documentupdater)
+
+	publishJob = (channel, cb)->
+		json = JSON.stringify({health_check:true, date: new Date().toString()})
+		logger.debug {channel:channel}, "sending pub to keep connection alive"
+		pubSubClient.publish channel, json, (err)->
+			if err?
+				logger.err {err, channel}, "error publishing pubsub traffic to redis"
+			cb(err)
+
+	runPubSubTraffic = ->
+		async.map ["applied-ops", "editor-events"], publishJob, (err)->
+			setTimeout(runPubSubTraffic, 1000 * 60)
+
+	runPubSubTraffic()
+
+
+

+ 2 - 0
services/real-time/app/coffee/DocumentUpdaterController.coffee

@@ -24,6 +24,8 @@ module.exports = DocumentUpdaterController =
 				DocumentUpdaterController._applyUpdateFromDocumentUpdater(io, message.doc_id, message.op)
 				DocumentUpdaterController._applyUpdateFromDocumentUpdater(io, message.doc_id, message.op)
 			else if message.error?
 			else if message.error?
 				DocumentUpdaterController._processErrorFromDocumentUpdater(io, message.doc_id, message.error, message)
 				DocumentUpdaterController._processErrorFromDocumentUpdater(io, message.doc_id, message.error, message)
+			else if message.health_check?
+				logger.debug {message}, "got health check message in applied ops channel"
 
 
 	_applyUpdateFromDocumentUpdater: (io, doc_id, update) ->
 	_applyUpdateFromDocumentUpdater: (io, doc_id, update) ->
 		for client in io.sockets.clients(doc_id)
 		for client in io.sockets.clients(doc_id)

+ 2 - 0
services/real-time/app/coffee/WebsocketLoadBalancer.coffee

@@ -37,4 +37,6 @@ module.exports = WebsocketLoadBalancer =
 				io.sockets.emit(message.message, message.payload...)
 				io.sockets.emit(message.message, message.payload...)
 			else if message.room_id?
 			else if message.room_id?
 				io.sockets.in(message.room_id).emit(message.message, message.payload...)
 				io.sockets.in(message.room_id).emit(message.message, message.payload...)
+			else if message.health_check?
+				logger.debug {message}, "got health check message in editor events channel"
 		
 		

+ 2 - 0
services/real-time/config/settings.defaults.coffee

@@ -44,6 +44,8 @@ settings =
 
 
 	forceDrainMsDelay: process.env['FORCE_DRAIN_MS_DELAY'] or false
 	forceDrainMsDelay: process.env['FORCE_DRAIN_MS_DELAY'] or false
 
 
+	continualPubsubTraffic: process.env['CONTINUAL_PUBSUB_TRAFFIC'] or false
+
 	
 	
 # console.log settings.redis
 # console.log settings.redis
 module.exports = settings
 module.exports = settings