Browse Source

Fix regeneration marker not expiring (#6290)

* Fix regeneration key not getting expired

* Add rake task to remove old regeneration markers
pull/4/head
Eugen Rochko 6 years ago
committed by GitHub
parent
commit
9b3b40df66
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 1 deletions
  1. +1
    -1
      app/controllers/concerns/user_tracking_concern.rb
  2. +9
    -0
      lib/tasks/mastodon.rake
  3. +6
    -0
      spec/controllers/concerns/user_tracking_concern_spec.rb

+ 1
- 1
app/controllers/concerns/user_tracking_concern.rb 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

+ 9
- 0
lib/tasks/mastodon.rake 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!

+ 6
- 0
spec/controllers/concerns/user_tracking_concern_spec.rb 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

Loading…
Cancel
Save