Merge pull request #59 from overleaf/ho-redis-natmap-sentinel

Move pubsub to seperate connection
This commit is contained in:
Henry Oswald 2019-07-08 11:18:12 +01:00 committed by GitHub
commit eadef7b133
4 changed files with 21 additions and 9 deletions

View file

@ -2,6 +2,7 @@ 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") async = require("async")
_ = require "underscore"
logger = require "logger-sharelatex" logger = require "logger-sharelatex"
logger.initialize("real-time") logger.initialize("real-time")
@ -60,6 +61,7 @@ app.get "/debug/events", (req, res, next) ->
res.send "debug mode will log next #{Settings.debugEvents} events" res.send "debug mode will log next #{Settings.debugEvents} events"
rclient = require("redis-sharelatex").createClient(Settings.redis.realtime) rclient = require("redis-sharelatex").createClient(Settings.redis.realtime)
app.get "/health_check/redis", (req, res, next) -> app.get "/health_check/redis", (req, res, next) ->
rclient.healthCheck (error) -> rclient.healthCheck (error) ->
if error? if error?
@ -132,16 +134,20 @@ if Settings.forceDrainMsDelay?
if Settings.continualPubsubTraffic if Settings.continualPubsubTraffic
console.log "continualPubsubTraffic enabled" console.log "continualPubsubTraffic enabled"
pubSubClient = redis.createClient(Settings.redis.documentupdater) redisClients = [redis.createClient(Settings.redis.documentupdater), redis.createClient(Settings.redis.realtime)]
publishJob = (channel, cb)-> publishJob = (channel, callback)->
checker = new HealthCheckManager(channel) checker = new HealthCheckManager(channel)
logger.debug {channel:channel}, "sending pub to keep connection alive" logger.debug {channel:channel}, "sending pub to keep connection alive"
json = JSON.stringify({health_check:true, key: checker.id, date: new Date().toString()}) json = JSON.stringify({health_check:true, key: checker.id, date: new Date().toString()})
pubSubClient.publish channel, json, (err)-> jobs = _.map redisClients, (rclient)->
if err? return (cb)->
logger.err {err, channel}, "error publishing pubsub traffic to redis" rclient.publish channel, json, (err)->
cb(err) if err?
logger.err {err, channel}, "error publishing pubsub traffic to redis"
return cb(err)
async.series jobs, callback
runPubSubTraffic = -> runPubSubTraffic = ->
async.map ["applied-ops", "editor-events"], publishJob, (err)-> async.map ["applied-ops", "editor-events"], publishJob, (err)->

View file

@ -1,7 +1,7 @@
logger = require "logger-sharelatex" logger = require "logger-sharelatex"
settings = require 'settings-sharelatex' settings = require 'settings-sharelatex'
redis = require("redis-sharelatex") redis = require("redis-sharelatex")
rclient = redis.createClient(settings.redis.documentupdater) rclient = redis.createClient(settings.redis.pubsub)
SafeJsonParse = require "./SafeJsonParse" SafeJsonParse = require "./SafeJsonParse"
EventLogger = require "./EventLogger" EventLogger = require "./EventLogger"
HealthCheckManager = require "./HealthCheckManager" HealthCheckManager = require "./HealthCheckManager"

View file

@ -2,8 +2,8 @@ Settings = require 'settings-sharelatex'
logger = require 'logger-sharelatex' logger = require 'logger-sharelatex'
redis = require("redis-sharelatex") redis = require("redis-sharelatex")
SafeJsonParse = require "./SafeJsonParse" SafeJsonParse = require "./SafeJsonParse"
rclientPub = redis.createClient(Settings.redis.realtime) rclientPub = redis.createClient(Settings.redis.pubsub)
rclientSub = redis.createClient(Settings.redis.realtime) rclientSub = redis.createClient(Settings.redis.pubsub)
EventLogger = require "./EventLogger" EventLogger = require "./EventLogger"
HealthCheckManager = require "./HealthCheckManager" HealthCheckManager = require "./HealthCheckManager"

View file

@ -1,5 +1,11 @@
settings = settings =
redis: redis:
pubsub:
host: process.env['PUBSUB_REDIS_HOST'] or process.env['REDIS_HOST'] or "localhost"
port: process.env['PUBSUB_REDIS_PORT'] or process.env['REDIS_PORT'] or "6379"
password: process.env["PUBSUB_REDIS_PASSWORD"] or process.env["REDIS_PASSWORD"] or ""
realtime: realtime:
host: process.env['REAL_TIME_REDIS_HOST'] or process.env['REDIS_HOST'] or "localhost" host: process.env['REAL_TIME_REDIS_HOST'] or process.env['REDIS_HOST'] or "localhost"
port: process.env['REAL_TIME_REDIS_PORT'] or process.env['REDIS_PORT'] or "6379" port: process.env['REAL_TIME_REDIS_PORT'] or process.env['REDIS_PORT'] or "6379"