From 15337b5bdf0b71488c43df6670a4e61b72c15447 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 20 Oct 2020 07:41:17 -0700 Subject: [PATCH] fix: Improve error handling when redis connection is lost --- server/main.js | 9 +++++++++ server/redis.js | 12 ++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/server/main.js b/server/main.js index 840625e8..cf8cc188 100644 --- a/server/main.js +++ b/server/main.js @@ -27,6 +27,15 @@ io.adapter( }) ); +io.of("/").adapter.on("error", (err) => { + if (err.name === "MaxRetriesPerRequestError") { + console.error(`Redis error: ${err.message}. Shutting down now.`); + throw err; + } else { + console.error(`Redis error: ${err.message}`); + } +}); + SocketAuth(io, { authenticate: async (socket, data, callback) => { const { token } = data; diff --git a/server/redis.js b/server/redis.js index 2b58feb0..55d614e7 100644 --- a/server/redis.js +++ b/server/redis.js @@ -1,8 +1,16 @@ // @flow import Redis from "ioredis"; -const client = new Redis(process.env.REDIS_URL); -const subscriber = new Redis(process.env.REDIS_URL); +const options = { + maxRetriesPerRequest: 20, + retryStrategy(times) { + console.warn(`Retrying redis connection: attempt ${times}`); + return Math.min(times * 100, 3000); + }, +}; + +const client = new Redis(process.env.REDIS_URL, options); +const subscriber = new Redis(process.env.REDIS_URL, options); // More than the default of 10 listeners is expected for the amount of queues // we're running. Increase the max here to prevent a warning in the console: