Fix regeneration marker not expiring (#6290)

* Fix regeneration key not getting expired

* Add rake task to remove old regeneration markers
th-downstream
Eugen Rochko 7 years ago committed by GitHub
parent b0f2bff481
commit 92df0bba59

@ -32,7 +32,7 @@ module UserTrackingConcern
end end
def regenerate_feed! 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) RegenerationWorker.perform_async(current_user.account_id)
end end
end end

@ -341,6 +341,15 @@ namespace :mastodon do
LinkCrawlWorker.push_bulk status_ids LinkCrawlWorker.push_bulk status_ids
end 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' desc 'Check every known remote account and delete those that no longer exist in origin'
task purge_removed_accounts: :environment do task purge_removed_accounts: :environment do
prepare_for_options! prepare_for_options!

@ -69,6 +69,12 @@ describe ApplicationController, type: :controller do
expect(RegenerationWorker).to have_received(:perform_async) expect(RegenerationWorker).to have_received(:perform_async)
end 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 it 'regenerates feed when sign in is older than two weeks' do
get :show get :show

Loading…
Cancel
Save