Reduce number of commands in FeedManager#trim (#3989)
This commit is contained in:
		
				
					committed by
					
						 Eugen Rochko
						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