discourse/app/jobs/scheduled/ensure_s3_uploads_existence.rb
2023-01-09 14:14:59 +00:00

63 lines
1.5 KiB
Ruby

# frozen_string_literal: true
module Jobs
class EnsureS3UploadsExistence < ::Jobs::Scheduled
every 1.day
WAIT_AFTER_RESTORE_HOURS = 48
def perform(*args)
super
ensure
if @db_inventories
@db_inventories.values.each do |f|
f.close
f.unlink
end
end
end
def s3_helper
Discourse.store.s3_helper
end
def prepare_for_all_sites
inventory = S3Inventory.new(s3_helper, :upload)
@db_inventories = inventory.prepare_for_all_sites
@inventory_date = inventory.inventory_date
end
def execute(args)
return if !executable?
require "s3_inventory"
if !@db_inventories && Rails.configuration.multisite && GlobalSetting.use_s3?
prepare_for_all_sites
end
if @db_inventories &&
preloaded_inventory_file =
@db_inventories[RailsMultisite::ConnectionManagement.current_db]
S3Inventory.new(
s3_helper,
:upload,
preloaded_inventory_file: preloaded_inventory_file,
preloaded_inventory_date: @inventory_date,
).backfill_etags_and_list_missing
else
S3Inventory.new(s3_helper, :upload).backfill_etags_and_list_missing
end
end
def executable?
return false if !SiteSetting.enable_s3_inventory
if last_restore_date = BackupMetadata.last_restore_date
return false if last_restore_date > WAIT_AFTER_RESTORE_HOURS.hours.ago
end
true
end
end
end