diff --git a/app/lib/feed_manager.rb b/app/lib/feed_manager.rb index 90a1441f2..c507f2636 100644 --- a/app/lib/feed_manager.rb +++ b/app/lib/feed_manager.rb @@ -38,9 +38,7 @@ class FeedManager end def trim(type, account_id) - return unless redis.zcard(key(type, account_id)) > FeedManager::MAX_ITEMS - last = redis.zrevrange(key(type, account_id), FeedManager::MAX_ITEMS - 1, FeedManager::MAX_ITEMS - 1) - redis.zremrangebyscore(key(type, account_id), '-inf', "(#{last.last}") + redis.zremrangebyrank(key(type, account_id), '0', (-(FeedManager::MAX_ITEMS + 1)).to_s) end def push_update_required?(timeline_type, account_id) diff --git a/spec/lib/feed_manager_spec.rb b/spec/lib/feed_manager_spec.rb index bf474c354..4bdc96866 100644 --- a/spec/lib/feed_manager_spec.rb +++ b/spec/lib/feed_manager_spec.rb @@ -131,4 +131,17 @@ RSpec.describe FeedManager do end end end + + describe '#push' do + it 'trims timelines if they will have more than FeedManager::MAX_ITEMS' do + account = Fabricate(:account) + status = Fabricate(:status) + members = FeedManager::MAX_ITEMS.times.map { |count| [count, count] } + Redis.current.zadd("feed:type:#{account.id}", members) + + FeedManager.instance.push('type', account, status) + + expect(Redis.current.zcard("feed:type:#{account.id}")).to eq FeedManager::MAX_ITEMS + end + end end