diff options
author | Claire <claire.github-309c@sitedethib.com> | 2022-04-19 14:54:43 +0200 |
---|---|---|
committer | Claire <claire.github-309c@sitedethib.com> | 2022-04-19 15:06:38 +0200 |
commit | 5c808ee0decac075b105e1f3a36933ce38d76255 (patch) | |
tree | 002205bf80dd86656ff102868054bc75daebe7f9 /app | |
parent | ec4a8d81b141c46a6fa967f8416724d0162cd6c7 (diff) |
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.
Diffstat (limited to 'app')
-rw-r--r-- | app/models/home_feed.rb | 48 |
1 files changed, 0 insertions, 48 deletions
diff --git a/app/models/home_feed.rb b/app/models/home_feed.rb index 53550b7db..d6ebb5fa6 100644 --- a/app/models/home_feed.rb +++ b/app/models/home_feed.rb @@ -9,52 +9,4 @@ class HomeFeed < Feed def regenerating? redis.exists?("account:#{@account.id}:regeneration") end - - def get(limit, max_id = nil, since_id = nil, min_id = nil) - limit = limit.to_i - max_id = max_id.to_i if max_id.present? - since_id = since_id.to_i if since_id.present? - min_id = min_id.to_i if min_id.present? - - if min_id.present? - redis_min_id = fetch_min_redis_id - return from_redis(limit, max_id, since_id, min_id) if redis_min_id && min_id >= redis_min_id - - statuses = from_database(limit, redis_min_id, since_id, min_id) - return statuses if statuses.size >= limit - - remaining_limit = limit - statuses.size - min_id = statuses.first.id unless statuses.empty? - from_redis(remaining_limit, max_id, since_id, min_id) + statuses - else - statuses = from_redis(limit, max_id, since_id, min_id) - return statuses if statuses.size >= limit - - if since_id.present? - redis_min_id = fetch_min_redis_id - return statuses if redis_min_id.present? && since_id >= redis_min_id - end - - remaining_limit = limit - statuses.size - max_id = statuses.last.id unless statuses.empty? - statuses + from_database(remaining_limit, max_id, since_id, min_id) - end - end - - protected - - def from_database(limit, max_id, since_id, min_id) - scope = Status.where(account: @account).or(Status.where(account: @account.following)) - scope = scope.where(visibility: %i(public unlisted private)) - scope - .to_a_paginated_by_id(limit, min_id: min_id, max_id: max_id, since_id: since_id) - .reject { |status| FeedManager.instance.filter?(:home, status, @account) } - .sort_by { |status| -status.id } - end - - private - - def fetch_min_redis_id - redis.zrangebyscore(key, '(0', '(+inf', limit: [0, 1], with_scores: true).first&.first&.to_i - end end |