From 922a1a1aba75114e879e39c101819353756e55e1 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Tue, 2 Jul 2019 12:04:19 +0100 Subject: [PATCH 1/7] bump redis driver --- services/real-time/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/real-time/package.json b/services/real-time/package.json index 3c8a05591a..898301f1f1 100644 --- a/services/real-time/package.json +++ b/services/real-time/package.json @@ -30,7 +30,7 @@ "express-session": "^1.9.1", "logger-sharelatex": "^1.6.0", "metrics-sharelatex": "^2.1.1", - "redis-sharelatex": "^1.0.8", + "redis-sharelatex": "^1.0.9", "request": "^2.88.0", "session.socket.io": "^0.1.6", "settings-sharelatex": "^1.1.0", From 92f60690f3ddbbbfc09ce549890058d16f70dfe6 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Tue, 2 Jul 2019 14:46:58 +0100 Subject: [PATCH 2/7] add redis set --- services/real-time/app.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/services/real-time/app.coffee b/services/real-time/app.coffee index 6161e63a46..fb8187808b 100644 --- a/services/real-time/app.coffee +++ b/services/real-time/app.coffee @@ -60,6 +60,7 @@ app.get "/debug/events", (req, res, next) -> res.send "debug mode will log next #{Settings.debugEvents} events" rclient = require("redis-sharelatex").createClient(Settings.redis.realtime) +rclient.set "hello", "world" app.get "/health_check/redis", (req, res, next) -> rclient.healthCheck (error) -> if error? From 88b75b8baa294348d2f38ce4da245eb6c1064ceb Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Tue, 2 Jul 2019 14:56:50 +0100 Subject: [PATCH 3/7] send health check data to all redis backends --- services/real-time/app.coffee | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/services/real-time/app.coffee b/services/real-time/app.coffee index fb8187808b..b8e3e964d6 100644 --- a/services/real-time/app.coffee +++ b/services/real-time/app.coffee @@ -133,16 +133,20 @@ if Settings.forceDrainMsDelay? if Settings.continualPubsubTraffic 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) logger.debug {channel:channel}, "sending pub to keep connection alive" json = JSON.stringify({health_check:true, key: checker.id, date: new Date().toString()}) - pubSubClient.publish channel, json, (err)-> - if err? - logger.err {err, channel}, "error publishing pubsub traffic to redis" - cb(err) + jobs = _.map redisClients, (rclient)-> + return (cb)-> + rclient.publish channel, json, (err)-> + if err? + logger.err {err, channel}, "error publishing pubsub traffic to redis" + return cb(err) + + async.series jobs, callback runPubSubTraffic = -> async.map ["applied-ops", "editor-events"], publishJob, (err)-> From 670ce61da1f0aebc45454384dbfc62c15b059abd Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Tue, 2 Jul 2019 15:36:17 +0100 Subject: [PATCH 4/7] require underscore --- services/real-time/app.coffee | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/real-time/app.coffee b/services/real-time/app.coffee index b8e3e964d6..9a74f57803 100644 --- a/services/real-time/app.coffee +++ b/services/real-time/app.coffee @@ -2,6 +2,7 @@ Metrics = require("metrics-sharelatex") Settings = require "settings-sharelatex" Metrics.initialize(Settings.appName or "real-time") async = require("async") +_ = require "underscore" logger = require "logger-sharelatex" logger.initialize("real-time") @@ -145,7 +146,7 @@ if Settings.continualPubsubTraffic if err? logger.err {err, channel}, "error publishing pubsub traffic to redis" return cb(err) - + async.series jobs, callback runPubSubTraffic = -> From 8042a415ec0b10373d1b53aa1eb71e7bdbbb45bc Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 3 Jul 2019 09:55:16 +0100 Subject: [PATCH 5/7] move pubsub traffic over to a pubsub redis connection string --- .../real-time/app/coffee/DocumentUpdaterController.coffee | 2 +- services/real-time/app/coffee/WebsocketLoadBalancer.coffee | 4 ++-- services/real-time/config/settings.defaults.coffee | 6 ++++++ 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/services/real-time/app/coffee/DocumentUpdaterController.coffee b/services/real-time/app/coffee/DocumentUpdaterController.coffee index 1eb5d21274..490902a837 100644 --- a/services/real-time/app/coffee/DocumentUpdaterController.coffee +++ b/services/real-time/app/coffee/DocumentUpdaterController.coffee @@ -1,7 +1,7 @@ logger = require "logger-sharelatex" settings = require 'settings-sharelatex' redis = require("redis-sharelatex") -rclient = redis.createClient(settings.redis.documentupdater) +rclient = redis.createClient(settings.redis.pubsub) SafeJsonParse = require "./SafeJsonParse" EventLogger = require "./EventLogger" HealthCheckManager = require "./HealthCheckManager" diff --git a/services/real-time/app/coffee/WebsocketLoadBalancer.coffee b/services/real-time/app/coffee/WebsocketLoadBalancer.coffee index ffe6e820ca..e4ed673f8a 100644 --- a/services/real-time/app/coffee/WebsocketLoadBalancer.coffee +++ b/services/real-time/app/coffee/WebsocketLoadBalancer.coffee @@ -2,8 +2,8 @@ Settings = require 'settings-sharelatex' logger = require 'logger-sharelatex' redis = require("redis-sharelatex") SafeJsonParse = require "./SafeJsonParse" -rclientPub = redis.createClient(Settings.redis.realtime) -rclientSub = redis.createClient(Settings.redis.realtime) +rclientPub = redis.createClient(Settings.redis.pubsub) +rclientSub = redis.createClient(Settings.redis.pubsub) EventLogger = require "./EventLogger" HealthCheckManager = require "./HealthCheckManager" diff --git a/services/real-time/config/settings.defaults.coffee b/services/real-time/config/settings.defaults.coffee index 28c51f79be..cc091a83f1 100644 --- a/services/real-time/config/settings.defaults.coffee +++ b/services/real-time/config/settings.defaults.coffee @@ -1,5 +1,11 @@ settings = 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: 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" From 42e5d2fb6e0210527e8b512ca60b70dd2dcaf7df Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 8 Jul 2019 11:17:08 +0100 Subject: [PATCH 6/7] Update app.coffee --- services/real-time/app.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/real-time/app.coffee b/services/real-time/app.coffee index 9a74f57803..0ddfe406e9 100644 --- a/services/real-time/app.coffee +++ b/services/real-time/app.coffee @@ -61,7 +61,7 @@ app.get "/debug/events", (req, res, next) -> res.send "debug mode will log next #{Settings.debugEvents} events" rclient = require("redis-sharelatex").createClient(Settings.redis.realtime) -rclient.set "hello", "world" + app.get "/health_check/redis", (req, res, next) -> rclient.healthCheck (error) -> if error? From 9953c933eeb9e3c436daba05480bae8ff26d1f15 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 8 Jul 2019 11:18:02 +0100 Subject: [PATCH 7/7] Update package.json --- services/real-time/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/real-time/package.json b/services/real-time/package.json index 898301f1f1..3c8a05591a 100644 --- a/services/real-time/package.json +++ b/services/real-time/package.json @@ -30,7 +30,7 @@ "express-session": "^1.9.1", "logger-sharelatex": "^1.6.0", "metrics-sharelatex": "^2.1.1", - "redis-sharelatex": "^1.0.9", + "redis-sharelatex": "^1.0.8", "request": "^2.88.0", "session.socket.io": "^0.1.6", "settings-sharelatex": "^1.1.0",