From 7b6966899bdb6b374d02dfc30ed3e4e93594c1a6 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 14 Jun 2017 12:09:34 +0100 Subject: [PATCH] Add script to expire existing DocOps lists --- .../document-updater/expire_docops.coffee | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 services/document-updater/expire_docops.coffee diff --git a/services/document-updater/expire_docops.coffee b/services/document-updater/expire_docops.coffee new file mode 100644 index 0000000000..1eb7d93c8f --- /dev/null +++ b/services/document-updater/expire_docops.coffee @@ -0,0 +1,44 @@ +Settings = require "settings-sharelatex" +rclient = require("redis-sharelatex").createClient(Settings.redis.documentupdater) +keys = Settings.redis.documentupdater.key_schema +async = require "async" +RedisManager = require "./app/js/RedisManager" + +getKeysFromNode = (node, pattern, callback) -> + cursor = 0 # redis iterator + keySet = {} # use hash to avoid duplicate results + # scan over all keys looking for pattern + doIteration = (cb) -> + node.scan cursor, "MATCH", pattern, "COUNT", 1000, (error, reply) -> + return callback(error) if error? + [cursor, keys] = reply + console.log "SCAN", keys.length + for key in keys + keySet[key] = true + if cursor == '0' # note redis returns string result not numeric + return callback(null, Object.keys(keySet)) + else + doIteration() + doIteration() + +getKeys = (pattern, callback) -> + nodes = rclient.nodes?('master') || [ rclient ]; + console.log "GOT NODES", nodes.length + doKeyLookupForNode = (node, cb) -> + getKeysFromNode node, pattern, cb + async.concatSeries nodes, doKeyLookupForNode, callback + +TTL = 60 * 60 # 1 hour +expireDocOps = (callback) -> + getKeys keys.docOps(doc_id: "*"), (error, keys) -> + async.mapSeries keys, + (key, cb) -> + console.log "EXPIRE #{key} #{RedisManager.DOC_OPS_TTL}" + rclient.expire key, RedisManager.DOC_OPS_TTL, cb + callback + +setTimeout () -> # Give redis a chance to connect + expireDocOps (error) -> + throw error if error? + process.exit() +, 1000 \ No newline at end of file