diff --git a/app/jobs/delete_post_files_job.rb b/app/jobs/delete_post_files_job.rb new file mode 100644 index 000000000..8f8030098 --- /dev/null +++ b/app/jobs/delete_post_files_job.rb @@ -0,0 +1,8 @@ +class DeletePostFilesJob < ApplicationJob + queue_as :default + queue_with_priority 20 + + def perform(id, md5, file_ext) + Post.delete_files(id, md5, file_ext) + end +end diff --git a/app/jobs/delete_upload_files_job.rb b/app/jobs/delete_upload_files_job.rb new file mode 100644 index 000000000..872305237 --- /dev/null +++ b/app/jobs/delete_upload_files_job.rb @@ -0,0 +1,8 @@ +class DeleteUploadFilesJob < ApplicationJob + queue_as :default + queue_with_priority 20 + + def perform(md5, file_ext, upload_id) + UploadService::Utils.delete_file(md5, file_ext, upload_id) + end +end diff --git a/app/logical/upload_service/utils.rb b/app/logical/upload_service/utils.rb index a0ad7fcd4..83207325b 100644 --- a/app/logical/upload_service/utils.rb +++ b/app/logical/upload_service/utils.rb @@ -166,7 +166,7 @@ class UploadService # in case this upload never finishes processing, we need to delete the # distributed files in the future - UploadService::Utils.delay(priority: -1, queue: "default", run_at: 24.hours.from_now).delete_file(upload.md5, upload.file_ext, upload.id) + DeleteUploadFilesJob.set(wait: 24.hours).perform_later(upload.md5, upload.file_ext, upload.id) end # these methods are only really used during upload processing even diff --git a/app/models/post.rb b/app/models/post.rb index 2439e6af0..a80beb856 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -88,7 +88,7 @@ class Post < ApplicationRecord end def queue_delete_files(grace_period) - Post.delay(queue: "default", run_at: Time.now + grace_period).delete_files(id, md5, file_ext) + DeletePostFilesJob.set(wait: grace_period).perform_later(id, md5, file_ext) end def delete_files diff --git a/test/models/upload_service_test.rb b/test/models/upload_service_test.rb index 06e462efe..6c555edcc 100644 --- a/test/models/upload_service_test.rb +++ b/test/models/upload_service_test.rb @@ -838,7 +838,7 @@ class UploadServiceTest < ActiveSupport::TestCase as_user { @post.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247350") } travel_to((PostReplacement::DELETION_GRACE_PERIOD + 1).days.from_now) do - Delayed::Worker.new.work_off + workoff_active_jobs end rescue Net::OpenTimeout skip "Remote connection to Pixiv failed" @@ -887,7 +887,7 @@ class UploadServiceTest < ActiveSupport::TestCase assert_nothing_raised { @post.file(:preview) } travel_to((PostReplacement::DELETION_GRACE_PERIOD + 1).days.from_now) do - Delayed::Worker.new.work_off + workoff_active_jobs end assert_nothing_raised { @post.file(:original) } @@ -914,20 +914,24 @@ class UploadServiceTest < ActiveSupport::TestCase @post2.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247364") assert_equal("4ceadc314938bc27f3574053a3e1459a", @post1.md5) assert_equal("cad1da177ef309bf40a117c17b8eecf5", @post2.md5) + @post2.reload @post2.replace!(replacement_url: "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg") assert_equal("d34e4cf0a437a5d65f8e82b7bcd02606", @post2.md5) Upload.destroy_all @post1.reload @post2.reload + @post1.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247364") @post2.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247350") assert_equal("cad1da177ef309bf40a117c17b8eecf5", @post1.md5) assert_equal("4ceadc314938bc27f3574053a3e1459a", @post2.md5) end - Timecop.travel(Time.now + PostReplacement::DELETION_GRACE_PERIOD + 1.day) do - Delayed::Worker.new.work_off + travel_to (PostReplacement::DELETION_GRACE_PERIOD + 1).days.from_now do + assert_raise(Post::DeletionError) do + workoff_active_jobs + end end assert_nothing_raised { @post1.file(:original) } diff --git a/test/test_helper.rb b/test/test_helper.rb index 9c043f189..7aabcc875 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -53,8 +53,15 @@ module TestHelpers Thread.current[:pixiv_comic_session_cache_key] = Cache.get(PixivWebAgent::COMIC_SESSION_CACHE_KEY) end end -end + # XXX replace with `perform_enqueued_jobs` after rails 6 upgrade. + def workoff_active_jobs + queue_adapter.enqueued_jobs.each do |job_data| + klass = job_data[:job] + klass.perform_now(*job_data[:args]) + end + end +end class ActiveSupport::TestCase include ActiveJob::TestHelper