From 88b08e384327f559c3b17fd2c4d558c14441cbfd Mon Sep 17 00:00:00 2001 From: Mikael Finstad Date: Thu, 4 Aug 2022 21:10:19 +0200 Subject: [PATCH] fix crash if redis disconnects (#3954) https://github.com/redis/node-redis/issues/2032 --- packages/@uppy/companion/src/server/emitter/redis-emitter.js | 4 ++++ packages/@uppy/companion/src/server/redis.js | 2 ++ 2 files changed, 6 insertions(+) diff --git a/packages/@uppy/companion/src/server/emitter/redis-emitter.js b/packages/@uppy/companion/src/server/emitter/redis-emitter.js index 3336b0699b..8e280cdf7e 100644 --- a/packages/@uppy/companion/src/server/emitter/redis-emitter.js +++ b/packages/@uppy/companion/src/server/emitter/redis-emitter.js @@ -1,6 +1,8 @@ const redis = require('redis') const { EventEmitter } = require('node:events') +const logger = require('../logger') + /** * This module simulates the builtin events.EventEmitter but with the use of redis. * This is useful for when companion is running on multiple instances and events need @@ -10,10 +12,12 @@ module.exports = (redisUrl, redisPubSubScope) => { const prefix = redisPubSubScope ? `${redisPubSubScope}:` : '' const getPrefixedEventName = (eventName) => `${prefix}${eventName}` const publisher = redis.createClient({ url: redisUrl }) + publisher.on('error', err => logger.error('publisher redis error', err)) let subscriber const connectedPromise = publisher.connect().then(() => { subscriber = publisher.duplicate() + subscriber.on('error', err => logger.error('subscriber redis error', err)) return subscriber.connect() }) diff --git a/packages/@uppy/companion/src/server/redis.js b/packages/@uppy/companion/src/server/redis.js index d14dab7ecc..10298c6f08 100644 --- a/packages/@uppy/companion/src/server/redis.js +++ b/packages/@uppy/companion/src/server/redis.js @@ -15,6 +15,8 @@ function createClient (opts) { // todo remove legacyMode when fixed: https://github.com/tj/connect-redis/issues/361 redisClient = redis.createClient({ ...opts, legacyMode: true }) + redisClient.on('error', err => logger.error('redis error', err)) + ;(async () => { try { // fire and forget.