Fetching statuses from all followed accounts at once takes too long within Postgres. Fetching them one by one and merging in Ruby could be a lot less resource-intensive Because the query for dynamically fetching the home timeline is so heavy, we can no longer offer it when the home timeline is missing
		
			
				
	
	
		
			44 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require 'rails_helper'
 | |
| 
 | |
| RSpec.describe HomeFeed, type: :model do
 | |
|   let(:account) { Fabricate(:account) }
 | |
| 
 | |
|   subject { described_class.new(account) }
 | |
| 
 | |
|   describe '#get' do
 | |
|     before do
 | |
|       Fabricate(:status, account: account, id: 1)
 | |
|       Fabricate(:status, account: account, id: 2)
 | |
|       Fabricate(:status, account: account, id: 3)
 | |
|       Fabricate(:status, account: account, id: 10)
 | |
|     end
 | |
| 
 | |
|     context 'when feed is generated' do
 | |
|       before do
 | |
|         Redis.current.zadd(
 | |
|           FeedManager.instance.key(:home, account.id),
 | |
|           [[4, 4], [3, 3], [2, 2], [1, 1]]
 | |
|         )
 | |
|       end
 | |
| 
 | |
|       it 'gets statuses with ids in the range from redis' do
 | |
|         results = subject.get(3)
 | |
| 
 | |
|         expect(results.map(&:id)).to eq [3, 2]
 | |
|         expect(results.first.attributes.keys).to eq %w(id updated_at)
 | |
|       end
 | |
|     end
 | |
| 
 | |
|     context 'when feed is being generated' do
 | |
|       before do
 | |
|         Redis.current.set("account:#{account.id}:regeneration", true)
 | |
|       end
 | |
| 
 | |
|       it 'returns nothing' do
 | |
|         results = subject.get(3)
 | |
| 
 | |
|         expect(results.map(&:id)).to eq []
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |