From f8f0572ee09122dd8fda51aec899f939c6ab03bf Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Sat, 24 Feb 2018 13:40:18 +0900 Subject: Do not push status to feed if its reblog is already inserted (#6488) A complemental change for precompute_feed_service_spec.rb also fixes its random failure which is caused by the Snowlake randomization of the order of an original status and its reblog. --- app/lib/feed_manager.rb | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'app') diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 20b10e113..dd78e543f 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -220,6 +220,14 @@ class FeedManager return false end else + # A reblog may reach earlier than the original status because of the + # delay of the worker deliverying the original status, the late addition + # by merging timelines, and other reasons. + # If such a reblog already exists, just do not re-insert it into the feed. + rank = redis.zrevrank(reblog_key, status.id) + + return false unless rank.nil? + redis.zadd(timeline_key, status.id, status.id) end -- cgit