Parcourir la source

expire redis keys after 1 day (#3771)

* expire redis keys after 1 day

to prevent buildup in redis
fixes #3748

* reuse redis config logic

* Update packages/@uppy/companion/src/server/Uploader.js

Co-authored-by: Tim Koschuetzki <tim-kos@users.noreply.github.com>

Co-authored-by: Tim Koschuetzki <tim-kos@users.noreply.github.com>
Mikael Finstad il y a 2 ans
Parent
commit
5bd5d38b0e

+ 1 - 1
packages/@uppy/companion/src/companion.js

@@ -77,7 +77,7 @@ module.exports.app = (optionsArg = {}) => {
 
   // create singleton redis client
   if (options.redisUrl) {
-    redis.client(merge({ url: options.redisUrl }, options.redisOptions || {}))
+    redis.client(options)
   }
   const emitter = createEmitter(options.redisUrl, options.redisPubSubScope)
 

+ 5 - 1
packages/@uppy/companion/src/server/Uploader.js

@@ -400,7 +400,11 @@ class Uploader {
    */
   saveState (state) {
     if (!this.storage) return
-    this.storage.set(`${Uploader.STORAGE_PREFIX}:${this.token}`, jsonStringify(state))
+    // make sure the keys get cleaned up.
+    // https://github.com/transloadit/uppy/issues/3748
+    const keyExpirySec = 60 * 60 * 24
+    const redisKey = `${Uploader.STORAGE_PREFIX}:${this.token}`
+    this.storage.set(redisKey, jsonStringify(state), 'EX', keyExpirySec)
   }
 
   /**

+ 11 - 6
packages/@uppy/companion/src/server/redis.js

@@ -1,21 +1,26 @@
 const redis = require('redis')
+const merge = require('lodash.merge')
 
 let redisClient
 
 /**
- * A Singleton module that provides only on redis client through out
+ * A Singleton module that provides a single redis client through out
  * the lifetime of the server
  *
  * @param {object=} opts node-redis client options
  */
-module.exports.client = (opts) => {
-  if (!opts) {
-    return redisClient
-  }
-
+function createClient (opts) {
   if (!redisClient) {
     redisClient = redis.createClient(opts)
   }
 
   return redisClient
 }
+
+module.exports.client = (companionOptions) => {
+  if (!companionOptions) {
+    return redisClient
+  }
+
+  return createClient(merge({ url: companionOptions.redisUrl }, companionOptions.redisOptions))
+}

+ 3 - 5
packages/@uppy/companion/src/standalone/index.js

@@ -4,16 +4,16 @@ const helmet = require('helmet')
 const morgan = require('morgan')
 const bodyParser = require('body-parser')
 const { URL } = require('url')
-const merge = require('lodash.merge')
 const session = require('express-session')
 const addRequestId = require('express-request-id')()
+const connectRedis = require('connect-redis')
+
 const logger = require('../server/logger')
 const redis = require('../server/redis')
 const companion = require('../companion')
 const helper = require('./helper')
 const middlewares = require('../server/middlewares')
 const { getURLBuilder } = require('../server/helpers/utils')
-const connectRedis = require('connect-redis')
 
 /**
  * Configures an Express app for running Companion standalone
@@ -141,9 +141,7 @@ module.exports = function server (inputCompanionOptions = {}) {
 
   if (companionOptions.redisUrl) {
     const RedisStore = connectRedis(session)
-    const redisClient = redis.client(
-      merge({ url: companionOptions.redisUrl }, companionOptions.redisOptions),
-    )
+    const redisClient = redis.client(companionOptions)
     sessionOptions.store = new RedisStore({ client: redisClient })
   }