From ce36f54dcd570145cd0d34be425692af1771c873 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Mon, 5 Dec 2016 11:39:08 +0800 Subject: [PATCH] Add rake task to clean up orphane Redis keys when a multisite has been removed. --- lib/tasks/redis.rake | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 lib/tasks/redis.rake diff --git a/lib/tasks/redis.rake b/lib/tasks/redis.rake new file mode 100644 index 00000000000..4300f0686cb --- /dev/null +++ b/lib/tasks/redis.rake @@ -0,0 +1,30 @@ +task 'redis:clean_up' => ['environment'] do + return unless Rails.configuration.multisite + + dbs = RailsMultisite::ConnectionManagement.all_dbs + dbs << Discourse::SIDEKIQ_NAMESPACE + + regexp = /((\$(?\w+)$)|(^?(?\w+):))/ + + cursor = 0 + redis = $redis.without_namespace + + loop do + cursor, keys = redis.scan(cursor) + cursor = cursor.to_i + + redis.multi do + keys.each do |key| + if match = key.match(regexp) + db_name = match[:message_bus] || match[:namespace] + + if !dbs.include?(db_name) + redis.del(key) + end + end + end + end + + break if cursor == 0 + end +end