63 lines
1.5 KiB
Ruby
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
|