Fix vacuum scheduler missing lock, locks never expiring (#19458)
Remove vacuuming of orphaned preview cards
This commit is contained in:
		
							parent
							
								
									6c1c7d9d3b
								
							
						
					
					
						commit
						d53e1fc6d9
					
				
					 5 changed files with 3 additions and 15 deletions
				
			
		| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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|
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue