Reduce number of commands in FeedManager#trim (#3989)
This commit is contained in:
		
				
					committed by
					
						
						Eugen Rochko
					
				
			
			
				
	
			
			
			
						parent
						
							b6a19e7b89
						
					
				
				
					commit
					60b2b56d38
				
			@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user