1
0
Fork 0
forked from fedi/mastodon

Fix vacuum scheduler missing lock, locks never expiring (#19458)

Remove vacuuming of orphaned preview cards
This commit is contained in:
Eugen Rochko 2022-10-26 12:10:48 +02:00 committed by GitHub
parent 1ae508bf2f
commit bf0ab3e0fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 3 additions and 15 deletions

View file

@ -8,8 +8,8 @@ class Vacuum::MediaAttachmentsVacuum
end end
def perform def perform
vacuum_cached_files! if retention_period?
vacuum_orphaned_records! vacuum_orphaned_records!
vacuum_cached_files! if retention_period?
end end
private private

View file

@ -9,7 +9,6 @@ class Vacuum::PreviewCardsVacuum
def perform def perform
vacuum_cached_images! if retention_period? vacuum_cached_images! if retention_period?
vacuum_orphaned_records!
end end
private private
@ -21,18 +20,10 @@ class Vacuum::PreviewCardsVacuum
end end
end end
def vacuum_orphaned_records!
orphaned_preview_cards.in_batches.destroy_all
end
def preview_cards_past_retention_period def preview_cards_past_retention_period
PreviewCard.cached.where(PreviewCard.arel_table[:updated_at].lt(@retention_period.ago)) PreviewCard.cached.where(PreviewCard.arel_table[:updated_at].lt(@retention_period.ago))
end end
def orphaned_preview_cards
PreviewCard.where('NOT EXISTS (SELECT 1 FROM preview_cards_statuses WHERE preview_cards_statuses.preview_card_id = preview_cards.id)').where(PreviewCard.arel_table[:created_at].lt(TTL.ago))
end
def retention_period? def retention_period?
@retention_period.present? @retention_period.present?
end end

View file

@ -3,7 +3,7 @@
class Scheduler::VacuumScheduler class Scheduler::VacuumScheduler
include Sidekiq::Worker include Sidekiq::Worker
sidekiq_options retry: 0 sidekiq_options retry: 0, lock: :until_executed
def perform def perform
vacuum_operations.each do |operation| vacuum_operations.each do |operation|

View file

@ -35,4 +35,5 @@ SidekiqUniqueJobs.configure do |config|
config.reaper_count = 1000 config.reaper_count = 1000
config.reaper_interval = 600 config.reaper_interval = 600
config.reaper_timeout = 150 config.reaper_timeout = 150
config.lock_ttl = 50.days.to_i
end end

View file

@ -28,9 +28,5 @@ RSpec.describe Vacuum::PreviewCardsVacuum do
it 'does not delete attached preview cards' do it 'does not delete attached preview cards' do
expect(new_preview_card.reload).to be_persisted expect(new_preview_card.reload).to be_persisted
end end
it 'deletes preview cards not attached to any status' do
expect { orphaned_preview_card.reload }.to raise_error ActiveRecord::RecordNotFound
end
end end
end end