DEV: Add hidden s3_inventory_bucket_region site setting (#27786)

This commit adds a hidden `s3_inventory_bucket_region` site setting to
specify the region of the `s3_inventory_bucket` when the `S3Inventory`
class initializes an instance of the `S3Helper`. By default, the
`S3Helper` class uses the value of the `s3_region` site setting but the
region of the `s3_inventory_bucket` is not always the same as the
`s3_region` configured.
This commit is contained in:
Alan Guo Xiang Tan 2024-07-09 12:03:43 +08:00 committed by GitHub
parent 7111d5e4bf
commit 86e5f46175
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 28 additions and 3 deletions

View File

@ -2517,6 +2517,9 @@ backups:
hidden: true hidden: true
default: "" default: ""
regex: '^[a-z0-9\-\/_]+$' # can't use '.' when using HTTPS regex: '^[a-z0-9\-\/_]+$' # can't use '.' when using HTTPS
s3_inventory_bucket_region:
hidden: true
default: ""
s3_disable_cleanup: s3_disable_cleanup:
default: false default: false
backup_time_of_day: backup_time_of_day:

View File

@ -298,7 +298,13 @@ module FileStore
def list_missing_uploads(skip_optimized: false) def list_missing_uploads(skip_optimized: false)
if s3_inventory_bucket = SiteSetting.s3_inventory_bucket if s3_inventory_bucket = SiteSetting.s3_inventory_bucket
S3Inventory.new(:upload, s3_inventory_bucket:).backfill_etags_and_list_missing s3_options = {}
if (s3_inventory_bucket_region = SiteSetting.s3_inventory_bucket_region).present?
s3_options[:region] = s3_inventory_bucket_region
end
S3Inventory.new(:upload, s3_inventory_bucket:, s3_options:).backfill_etags_and_list_missing
unless skip_optimized unless skip_optimized
S3Inventory.new(:optimized, s3_inventory_bucket:).backfill_etags_and_list_missing S3Inventory.new(:optimized, s3_inventory_bucket:).backfill_etags_and_list_missing

View File

@ -16,9 +16,10 @@ class S3Inventory
type, type,
s3_inventory_bucket:, s3_inventory_bucket:,
preloaded_inventory_file: nil, preloaded_inventory_file: nil,
preloaded_inventory_date: nil preloaded_inventory_date: nil,
s3_options: {}
) )
@s3_helper = S3Helper.new(s3_inventory_bucket) @s3_helper = S3Helper.new(s3_inventory_bucket, "", s3_options)
if preloaded_inventory_file && preloaded_inventory_date if preloaded_inventory_file && preloaded_inventory_date
# Data preloaded, so we don't need to fetch it again # Data preloaded, so we don't need to fetch it again

View File

@ -18,6 +18,21 @@ RSpec.describe S3Inventory do
expect(output).to eq("Failed to list inventory from S3\n") expect(output).to eq("Failed to list inventory from S3\n")
end end
it "should forward custom s3 options to the S3Helper when initializing" do
inventory =
S3Inventory.new(
:upload,
s3_inventory_bucket: "some-inventory-bucket",
s3_options: {
region: "us-west-1",
},
)
inventory.s3_helper.stub_client_responses!
expect(inventory.s3_helper.s3_client.config.region).to eq("us-west-1")
end
describe "verifying uploads" do describe "verifying uploads" do
before do before do
freeze_time freeze_time