From b20026b28676258b017dadf48faee9dbe82286c5 Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Wed, 12 Jun 2024 09:28:57 -0700 Subject: [PATCH 1/4] fix a memory leak when copying large files by using the hyrax uploader instead of a custom one --- app/factories/bulkrax/object_factory.rb | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/app/factories/bulkrax/object_factory.rb b/app/factories/bulkrax/object_factory.rb index 9c5d1449..ab1b955b 100644 --- a/app/factories/bulkrax/object_factory.rb +++ b/app/factories/bulkrax/object_factory.rb @@ -243,18 +243,14 @@ def update_file_set(attrs) def handle_remote_file(remote_file:, actor:, update: false) actor.file_set.label = remote_file['file_name'] actor.file_set.import_url = remote_file['url'] + auth_header = remote_file.fetch('auth_header', {}) - url = remote_file['url'] - tmp_file = Tempfile.new(remote_file['file_name'].split('.').first) - tmp_file.binmode - - URI.open(url) do |url_file| - tmp_file.write(url_file.read) - end + ImportUrlJob.perform_now(actor.file_set, operation_for(user: @user), auth_header) + end - tmp_file.rewind - update == true ? actor.update_content(tmp_file) : actor.create_content(tmp_file, from_url: true) - tmp_file.close + def file_set_operation_for(user:) + Hyrax::Operation.create!(user: user, + operation_type: "Attach Remote File") end end # rubocop:enable Metrics/ClassLength From 9b4fd16e20fa919068bdafa677e202bcc2448593 Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Wed, 12 Jun 2024 09:46:30 -0700 Subject: [PATCH 2/4] Update app/factories/bulkrax/object_factory.rb Co-authored-by: Shana Moore --- app/factories/bulkrax/object_factory.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/factories/bulkrax/object_factory.rb b/app/factories/bulkrax/object_factory.rb index ab1b955b..fc06f672 100644 --- a/app/factories/bulkrax/object_factory.rb +++ b/app/factories/bulkrax/object_factory.rb @@ -250,7 +250,7 @@ def handle_remote_file(remote_file:, actor:, update: false) def file_set_operation_for(user:) Hyrax::Operation.create!(user: user, - operation_type: "Attach Remote File") + operation_type: "Attach Remote File") end end # rubocop:enable Metrics/ClassLength From 62c81cfcf4e18b3abdafd553ca00d813f7aa0d3d Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Wed, 12 Jun 2024 21:22:51 -0700 Subject: [PATCH 3/4] call the cops --- app/factories/bulkrax/object_factory.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/factories/bulkrax/object_factory.rb b/app/factories/bulkrax/object_factory.rb index fc06f672..0ea0f2fa 100644 --- a/app/factories/bulkrax/object_factory.rb +++ b/app/factories/bulkrax/object_factory.rb @@ -228,19 +228,19 @@ def create_file_set_actor(attrs, work, work_permissions, uploaded_file, remote_f actor.create_metadata(attrs) actor.create_content(uploaded_file) if uploaded_file actor.attach_to_work(work, attrs) - handle_remote_file(remote_file: remote_file, actor: actor, update: false) if remote_file + handle_remote_file(remote_file: remote_file, actor: actor) if remote_file end def update_file_set(attrs) file_set_attrs = attrs.slice(*object.attributes.keys) actor = ::Hyrax::Actors::FileSetActor.new(object, @user) attrs['remote_files']&.each do |remote_file| - handle_remote_file(remote_file: remote_file, actor: actor, update: true) + handle_remote_file(remote_file: remote_file, actor: actor) end actor.update_metadata(file_set_attrs) end - def handle_remote_file(remote_file:, actor:, update: false) + def handle_remote_file(remote_file:, actor:) actor.file_set.label = remote_file['file_name'] actor.file_set.import_url = remote_file['url'] auth_header = remote_file.fetch('auth_header', {}) From 5e6d3e94940f9020670276b7eccb20051c3263a3 Mon Sep 17 00:00:00 2001 From: Rob Kaufman Date: Fri, 14 Jun 2024 16:32:25 -0700 Subject: [PATCH 4/4] Update object_factory.rb --- app/factories/bulkrax/object_factory.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/factories/bulkrax/object_factory.rb b/app/factories/bulkrax/object_factory.rb index 0ea0f2fa..ac45cb71 100644 --- a/app/factories/bulkrax/object_factory.rb +++ b/app/factories/bulkrax/object_factory.rb @@ -245,7 +245,7 @@ def handle_remote_file(remote_file:, actor:) actor.file_set.import_url = remote_file['url'] auth_header = remote_file.fetch('auth_header', {}) - ImportUrlJob.perform_now(actor.file_set, operation_for(user: @user), auth_header) + ImportUrlJob.perform_now(actor.file_set, file_set_operation_for(user: @user), auth_header) end def file_set_operation_for(user:)