about summary refs log tree commit diff
path: root/app/workers/scheduler/feed_cleanup_scheduler.rb
diff options
context:
space:
mode:
authorDavid Yip <yipdw@member.fsf.org>2017-10-18 11:52:04 -0500
committerDavid Yip <yipdw@member.fsf.org>2017-10-18 11:52:04 -0500
commit42e8c8eb0e9964d157ac160b3f816e58a771f045 (patch)
treec3f044eacc21ff65d9cb1bf20d111aaff6c86074 /app/workers/scheduler/feed_cleanup_scheduler.rb
parent4421f6598f5883908fb25743977306f19a0b0f0f (diff)
parent09d81defcda96eae7ffba36ccf1fb091ce08f17b (diff)
Merge tag 'v2.0.0' into gs-master
Diffstat (limited to 'app/workers/scheduler/feed_cleanup_scheduler.rb')
-rw-r--r--app/workers/scheduler/feed_cleanup_scheduler.rb28
1 files changed, 23 insertions, 5 deletions
diff --git a/app/workers/scheduler/feed_cleanup_scheduler.rb b/app/workers/scheduler/feed_cleanup_scheduler.rb
index 222f5ed84..cfa2d31a4 100644
--- a/app/workers/scheduler/feed_cleanup_scheduler.rb
+++ b/app/workers/scheduler/feed_cleanup_scheduler.rb
@@ -5,18 +5,36 @@ class Scheduler::FeedCleanupScheduler
   include Sidekiq::Worker
 
   def perform
+    reblogged_id_sets = {}
+    feedmanager = FeedManager.instance
+
+    redis.pipelined do
+      inactive_user_ids.each do |account_id|
+        redis.del(feedmanager.key(:home, account_id))
+        reblog_key = feedmanager.key(:home, account_id, 'reblogs')
+        # We collect a future for this: we don't block while getting
+        # it, but we can iterate over it later.
+        reblogged_id_sets[account_id] = redis.zrange(reblog_key, 0, -1)
+        redis.del(reblog_key)
+      end
+    end
+
+    # Remove all of the reblog tracking keys we just removed the
+    # references to.
     redis.pipelined do
-      inactive_users.each do |account_id|
-        redis.del(FeedManager.instance.key(:home, account_id))
-        redis.del(FeedManager.instance.key(:home, account_id, 'reblogs'))
+      reblogged_id_sets.each do |account_id, future|
+        future.value.each do |reblogged_id|
+          reblog_set_key = feedmanager.key(:home, account_id, "reblogs:#{reblogged_id}")
+          redis.del(reblog_set_key)
+        end
       end
     end
   end
 
   private
 
-  def inactive_users
-    @inactive_users ||= User.confirmed.inactive.pluck(:account_id)
+  def inactive_user_ids
+    @inactive_user_ids ||= User.confirmed.inactive.pluck(:account_id)
   end
 
   def redis