Fix regeneration marker not expiring (#6290)

* Fix regeneration key not getting expired

* Add rake task to remove old regeneration markers
pull/6297/head
Eugen Rochko 2018-01-18 20:29:56 +01:00 committed by GitHub
parent d799921c75
commit 9b3b40df66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 1 deletions

View File

@ -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

View File

@ -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!

View File

@ -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