commit: 9b3b40df660d90fddb7563def4fab9b5cee701e9
parent: d799921c75e7bfb83504bb79dcc1c269c91d168c
Author: Eugen Rochko <eugen@zeonfederated.com>
Date: Thu, 18 Jan 2018 20:29:56 +0100
Fix regeneration marker not expiring (#6290)
* Fix regeneration key not getting expired
* Add rake task to remove old regeneration markers
Diffstat:
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/app/controllers/concerns/user_tracking_concern.rb b/app/controllers/concerns/user_tracking_concern.rb
@@ -32,7 +32,7 @@ module UserTrackingConcern
end
def regenerate_feed!
- Redis.current.setnx("account:#{current_user.account_id}:regeneration", true) == 1 && Redis.current.expire("account:#{current_user.account_id}:regeneration", 3_600 * 24)
+ Redis.current.setnx("account:#{current_user.account_id}:regeneration", true) && Redis.current.expire("account:#{current_user.account_id}:regeneration", 1.day.seconds)
RegenerationWorker.perform_async(current_user.account_id)
end
end
diff --git a/lib/tasks/mastodon.rake b/lib/tasks/mastodon.rake
@@ -341,6 +341,15 @@ namespace :mastodon do
LinkCrawlWorker.push_bulk status_ids
end
+ desc 'Remove all home feed regeneration markers'
+ task remove_regeneration_markers: :environment do
+ keys = Redis.current.keys('account:*:regeneration')
+
+ Redis.current.pipelined do
+ keys.each { |key| Redis.current.del(key) }
+ end
+ end
+
desc 'Check every known remote account and delete those that no longer exist in origin'
task purge_removed_accounts: :environment do
prepare_for_options!
diff --git a/spec/controllers/concerns/user_tracking_concern_spec.rb b/spec/controllers/concerns/user_tracking_concern_spec.rb
@@ -69,6 +69,12 @@ describe ApplicationController, type: :controller do
expect(RegenerationWorker).to have_received(:perform_async)
end
+ it 'sets the regeneration marker to expire' do
+ allow(RegenerationWorker).to receive(:perform_async)
+ get :show
+ expect(Redis.current.ttl("account:#{user.account_id}:regeneration")).to be >= 0
+ end
+
it 'regenerates feed when sign in is older than two weeks' do
get :show