From 5c808ee0decac075b105e1f3a36933ce38d76255 Mon Sep 17 00:00:00 2001 From: Claire Date: Tue, 19 Apr 2022 14:54:43 +0200 Subject: Revert support from loading Home timeline from database Unfortunately, the database query could turn out very inefficient and I did not manage to find a way to improve that. Furthermore, there were still behavior inconsistencies between fetching the timeline from Redis and fetching it from Postgres. --- spec/models/home_feed_spec.rb | 76 ++++++++----------------------------------- 1 file changed, 13 insertions(+), 63 deletions(-) (limited to 'spec/models/home_feed_spec.rb') diff --git a/spec/models/home_feed_spec.rb b/spec/models/home_feed_spec.rb index 20756633c..ee7a83960 100644 --- a/spec/models/home_feed_spec.rb +++ b/spec/models/home_feed_spec.rb @@ -1,72 +1,32 @@ require 'rails_helper' RSpec.describe HomeFeed, type: :model do - let(:account) { Fabricate(:account) } - let(:followed) { Fabricate(:account) } - let(:other) { Fabricate(:account) } + let(:account) { Fabricate(:account) } subject { described_class.new(account) } describe '#get' do before do - account.follow!(followed) - - Fabricate(:status, account: account, id: 1) - Fabricate(:status, account: account, id: 2) - status = Fabricate(:status, account: followed, id: 3) - Fabricate(:mention, account: account, status: status) - Fabricate(:status, account: account, id: 10) - Fabricate(:status, account: other, id: 11) - Fabricate(:status, account: followed, id: 12, visibility: :private) - Fabricate(:status, account: followed, id: 13, visibility: :direct) + 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 - FeedManager.instance.populate_home(account) + 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 with database' do + it 'gets statuses with ids in the range from redis' do results = subject.get(3) - expect(results.map(&:id)).to eq [12, 10, 3] + expect(results.map(&:id)).to eq [3, 2] expect(results.first.attributes.keys).to eq %w(id updated_at) end - - it 'with since_id present' do - results = subject.get(3, nil, 3, nil) - expect(results.map(&:id)).to eq [12, 10] - end - - it 'with min_id present' do - results = subject.get(3, nil, nil, 0) - expect(results.map(&:id)).to eq [3, 2, 1] - end - end - - context 'when feed is only partial' do - before do - FeedManager.instance.populate_home(account) - - Redis.current.zremrangebyrank(FeedManager.instance.key(:home, account.id), 0, -2) - end - - it 'gets statuses with ids in the range from redis with database' do - results = subject.get(3) - - expect(results.map(&:id)).to eq [12, 10, 3] - expect(results.first.attributes.keys).to eq %w(id updated_at) - end - - it 'with since_id present' do - results = subject.get(3, nil, 3, nil) - expect(results.map(&:id)).to eq [12, 10] - end - - it 'with min_id present' do - results = subject.get(3, nil, nil, 0) - expect(results.map(&:id)).to eq [3, 2, 1] - end end context 'when feed is being generated' do @@ -74,20 +34,10 @@ RSpec.describe HomeFeed, type: :model do Redis.current.set("account:#{account.id}:regeneration", true) end - it 'returns from database' do + it 'returns nothing' do results = subject.get(3) - expect(results.map(&:id)).to eq [12, 10, 3] - end - - it 'with since_id present' do - results = subject.get(3, nil, 3, nil) - expect(results.map(&:id)).to eq [12, 10] - end - - it 'with min_id present' do - results = subject.get(3, nil, nil, 0) - expect(results.map(&:id)).to eq [3, 2, 1] + expect(results.map(&:id)).to eq [] end end end -- cgit