diff --git a/app/uploaders/object_storage.rb b/app/uploaders/object_storage.rb index 672433ec534bb3526fe11bac4795f183bac9a437..a8328304e734d18e837e2a94e8102c493aa3c936 100644 --- a/app/uploaders/object_storage.rb +++ b/app/uploaders/object_storage.rb @@ -31,7 +31,8 @@ def store!(file) # The direct_upload_final_path is defined which means # file was uploaded to its final location so no need to move it. # Now we delete the pending upload entry as the upload is considered complete. - ObjectStorage::PendingDirectUpload.complete(@uploader.class.storage_location_identifier, file.path) + pending_upload_path = @uploader.class.without_bucket_prefix(file.path) + ObjectStorage::PendingDirectUpload.complete(@uploader.class.storage_location_identifier, pending_upload_path) file end @@ -196,6 +197,10 @@ def with_bucket_prefix(path) File.join([object_store_options.bucket_prefix, path].compact) end + def without_bucket_prefix(path) + Pathname.new(path).relative_path_from(object_store_options.bucket_prefix.to_s).to_s + end + def object_store_config ObjectStorage::Config.new(object_store_options) end diff --git a/spec/uploaders/object_storage_spec.rb b/spec/uploaders/object_storage_spec.rb index a748c544bfdc6e8f1ede44c4b38b44435b05b3ed..8c33224968dc474efaea1b2bac8e2c9aa074c2c2 100644 --- a/spec/uploaders/object_storage_spec.rb +++ b/spec/uploaders/object_storage_spec.rb @@ -1097,19 +1097,31 @@ def escape_path(path) let(:fog_config) do Gitlab.config.uploads.object_store.tap do |config| config[:remote_directory] = 'main-bucket' - config[:bucket_prefix] = 'uploads' + config[:bucket_prefix] = 'my/uploads' end end let(:bucket) { 'main-bucket' } - let(:fog_file_path) { "uploads/#{final_path}" } + let(:fog_file_path) { "my/uploads/#{final_path}" } it 'stores the file final path in the db without the prefix' do expect { subject }.not_to raise_error - expect(uploader.store_path).to eq("uploads/#{final_path}") + expect(uploader.store_path).to eq("my/uploads/#{final_path}") expect(object.file_final_path).to eq(final_path) end + + context 'and file is stored' do + subject do + uploader.store!(uploaded_file) + end + + it 'completes the matching pending upload entry' do + expect { subject } + .to change { ObjectStorage::PendingDirectUpload.exists?(uploader_class.storage_location_identifier, final_path) } + .to(false) + end + end end context 'when file is stored' do