Reduce number of commands in FeedManager#trim (#3989)
This commit is contained in:
		
							parent
							
								
									b6a19e7b89
								
							
						
					
					
						commit
						60b2b56d38
					
				
					 2 changed files with 14 additions and 3 deletions
				
			
		| 
						 | 
					@ -38,9 +38,7 @@ class FeedManager
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def trim(type, account_id)
 | 
					  def trim(type, account_id)
 | 
				
			||||||
    return unless redis.zcard(key(type, account_id)) > FeedManager::MAX_ITEMS
 | 
					    redis.zremrangebyrank(key(type, account_id), '0', (-(FeedManager::MAX_ITEMS + 1)).to_s)
 | 
				
			||||||
    last = redis.zrevrange(key(type, account_id), FeedManager::MAX_ITEMS - 1, FeedManager::MAX_ITEMS - 1)
 | 
					 | 
				
			||||||
    redis.zremrangebyscore(key(type, account_id), '-inf', "(#{last.last}")
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def push_update_required?(timeline_type, account_id)
 | 
					  def push_update_required?(timeline_type, account_id)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -131,4 +131,17 @@ RSpec.describe FeedManager do
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    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
 | 
					end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue