diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2019-10-06 22:11:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-06 22:11:17 +0200 |
commit | f665901e3c0930fb8b3741f6bc6f6a15dd0343f6 (patch) | |
tree | 1cd9cd66d5af6d23ac5ef834fd85ad9b803c1f99 /app/models | |
parent | efda126914bf409ca07a9446415b508811a58022 (diff) |
Fix performance of home feed regeneration (#12084)
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
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/home_feed.rb | 16 | ||||
-rw-r--r-- | app/models/status.rb | 4 |
2 files changed, 2 insertions, 18 deletions
diff --git a/app/models/home_feed.rb b/app/models/home_feed.rb index ba7564983..1fd506138 100644 --- a/app/models/home_feed.rb +++ b/app/models/home_feed.rb @@ -7,19 +7,7 @@ class HomeFeed < Feed @account = account end - def get(limit, max_id = nil, since_id = nil, min_id = nil) - if redis.exists("account:#{@account.id}:regeneration") - from_database(limit, max_id, since_id, min_id) - else - super - end - end - - private - - def from_database(limit, max_id, since_id, min_id) - Status.as_home_timeline(@account) - .paginate_by_id(limit, max_id: max_id, since_id: since_id, min_id: min_id) - .reject { |status| FeedManager.instance.filter?(:home, status, @account.id) } + def regenerating? + redis.exists("account:#{@id}:regeneration") end end diff --git a/app/models/status.rb b/app/models/status.rb index 3504ac370..0c01a5389 100644 --- a/app/models/status.rb +++ b/app/models/status.rb @@ -282,10 +282,6 @@ class Status < ApplicationRecord where(language: nil).or where(language: account.chosen_languages) end - def as_home_timeline(account) - where(account: [account] + account.following).where(visibility: [:public, :unlisted, :private]) - end - def as_public_timeline(account = nil, local_only = false) query = timeline_scope(local_only).without_replies |