diff --git a/server/services/websockets.ts b/server/services/websockets.ts index cff14985c..94f30660a 100644 --- a/server/services/websockets.ts +++ b/server/services/websockets.ts @@ -85,8 +85,7 @@ export default function init( io.of("/").adapter.on("error", (err: Error) => { if (err.name === "MaxRetriesPerRequestError") { - Logger.error("Redis maximum retries exceeded in socketio adapter", err); - throw err; + Logger.fatal("Redis maximum retries exceeded in socketio adapter", err); } else { Logger.error("Redis error in socketio adapter", err); } diff --git a/server/storage/redis.ts b/server/storage/redis.ts index 1a7536db0..83e6e14c4 100644 --- a/server/storage/redis.ts +++ b/server/storage/redis.ts @@ -11,12 +11,17 @@ type RedisAdapterOptions = RedisOptions & { const defaultOptions: RedisOptions = { maxRetriesPerRequest: 20, enableReadyCheck: false, + showFriendlyErrorStack: env.ENVIRONMENT === "development", retryStrategy(times: number) { Logger.warn(`Retrying redis connection: attempt ${times}`); return Math.min(times * 100, 3000); }, + reconnectOnError(err) { + return err.message.includes("READONLY"); + }, + // support Heroku Redis, see: // https://devcenter.heroku.com/articles/heroku-redis#ioredis-module tls: (env.REDIS_URL || "").startsWith("rediss://")