29 lines
1.2 KiB
Ruby
29 lines
1.2 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Jobs
|
||
|
# Sometimes we need to update a _lot_ of ACLs on S3 (such as when secure media
|
||
|
# is enabled), and since it takes ~1s per upload to update the ACL, this is
|
||
|
# best spread out over many jobs instead of having to do the whole thing serially.
|
||
|
class SyncAclsForUploads < ::Jobs::Base
|
||
|
def execute(args)
|
||
|
return if !Discourse.store.external?
|
||
|
return if !args.key?(:upload_ids)
|
||
|
|
||
|
# TODO (martin) Change the logging here to debug after acl_stale implemented.
|
||
|
#
|
||
|
# Note...these log messages are set to warn to ensure this is working
|
||
|
# as intended in initial production trials, this will be set to debug
|
||
|
# after an acl_stale column is added to uploads.
|
||
|
time = Benchmark.measure do
|
||
|
Rails.logger.warn("Syncing ACL for upload ids: #{args[:upload_ids].join(", ")}")
|
||
|
Upload.includes(:optimized_images).where(id: args[:upload_ids]).find_in_batches do |uploads|
|
||
|
uploads.each do |upload|
|
||
|
Discourse.store.update_upload_ACL(upload, optimized_images_preloaded: true)
|
||
|
end
|
||
|
end
|
||
|
Rails.logger.warn("Completed syncing ACL for upload ids in #{time.to_s}. IDs: #{args[:upload_ids].join(", ")}")
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|