uploads: switch to active job.
* Switch upload processing from DelayedJob to ActiveJob. * Remove remaining references to delayed job from tests. Closes #4128.
This commit is contained in:
8
app/jobs/upload_preprocessor_delayed_start_job.rb
Normal file
8
app/jobs/upload_preprocessor_delayed_start_job.rb
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
class UploadPreprocessorDelayedStartJob < ApplicationJob
|
||||||
|
queue_as :default
|
||||||
|
queue_with_priority -1
|
||||||
|
|
||||||
|
def perform(source, referer_url, uploader)
|
||||||
|
UploadService::Preprocessor.new(source: source, referer_url: referer_url).delayed_start(uploader.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
8
app/jobs/upload_service_delayed_start_job.rb
Normal file
8
app/jobs/upload_service_delayed_start_job.rb
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
class UploadServiceDelayedStartJob < ApplicationJob
|
||||||
|
queue_as :default
|
||||||
|
queue_with_priority -1
|
||||||
|
|
||||||
|
def perform(uploader)
|
||||||
|
UploadService.delayed_start(uploader.id)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -22,7 +22,7 @@ class UploadService
|
|||||||
preprocessor = Preprocessor.new(params)
|
preprocessor = Preprocessor.new(params)
|
||||||
|
|
||||||
if preprocessor.in_progress?
|
if preprocessor.in_progress?
|
||||||
delay(queue: "default", priority: -1, run_at: 5.seconds.from_now).delayed_start(CurrentUser.id)
|
UploadServiceDelayedStartJob.set(wait: 5.seconds).perform_later(CurrentUser.user)
|
||||||
return preprocessor.predecessor
|
return preprocessor.predecessor
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -92,7 +92,7 @@ class UploadService
|
|||||||
upload.update(status: "completed", post_id: @post.id)
|
upload.update(status: "completed", post_id: @post.id)
|
||||||
|
|
||||||
if @post.is_pending? && Automod::UpdateDynamoDbJob.enabled?
|
if @post.is_pending? && Automod::UpdateDynamoDbJob.enabled?
|
||||||
Delayed::Job.enqueue(Automod::UpdateDynamoDbJob.new(@post.id), run_at: 84.hours.from_now, queue: "default")
|
#Delayed::Job.enqueue(Automod::UpdateDynamoDbJob.new(@post.id), run_at: 84.hours.from_now, queue: "default")
|
||||||
end
|
end
|
||||||
|
|
||||||
@post
|
@post
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class UploadService
|
|||||||
|
|
||||||
if Utils.is_downloadable?(url) && file.nil?
|
if Utils.is_downloadable?(url) && file.nil?
|
||||||
# this gets called from UploadsController#new so we need to preprocess async
|
# this gets called from UploadsController#new so we need to preprocess async
|
||||||
Preprocessor.new(source: url, referer_url: ref).delay(priority: -1, queue: "default").delayed_start(CurrentUser.id)
|
UploadPreprocessorDelayedStartJob.perform_later(url, ref, CurrentUser.user)
|
||||||
|
|
||||||
begin
|
begin
|
||||||
download = Downloads::File.new(url, ref)
|
download = Downloads::File.new(url, ref)
|
||||||
|
|||||||
@@ -3,8 +3,6 @@ require 'test_helper'
|
|||||||
class PostReplacementsControllerTest < ActionDispatch::IntegrationTest
|
class PostReplacementsControllerTest < ActionDispatch::IntegrationTest
|
||||||
context "The post replacements controller" do
|
context "The post replacements controller" do
|
||||||
setup do
|
setup do
|
||||||
Delayed::Worker.delay_jobs = true # don't delete the old images right away
|
|
||||||
|
|
||||||
@user = create(:moderator_user, can_approve_posts: true, created_at: 1.month.ago)
|
@user = create(:moderator_user, can_approve_posts: true, created_at: 1.month.ago)
|
||||||
@user.as_current do
|
@user.as_current do
|
||||||
@post = create(:post, source: "https://google.com")
|
@post = create(:post, source: "https://google.com")
|
||||||
@@ -12,10 +10,6 @@ class PostReplacementsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
teardown do
|
|
||||||
Delayed::Worker.delay_jobs = false
|
|
||||||
end
|
|
||||||
|
|
||||||
context "create action" do
|
context "create action" do
|
||||||
should "render" do
|
should "render" do
|
||||||
params = {
|
params = {
|
||||||
@@ -31,9 +25,8 @@ class PostReplacementsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
@post.reload
|
@post.reload
|
||||||
end
|
end
|
||||||
|
|
||||||
travel(PostReplacement::DELETION_GRACE_PERIOD + 1.day) do
|
travel(PostReplacement::DELETION_GRACE_PERIOD + 1.day)
|
||||||
Delayed::Worker.new.work_off
|
perform_enqueued_jobs
|
||||||
end
|
|
||||||
|
|
||||||
assert_response :success
|
assert_response :success
|
||||||
assert_equal("https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg", @post.source)
|
assert_equal("https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg", @post.source)
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
file = Rack::Test::UploadedFile.new("#{Rails.root}/test/files/test.jpg", "image/jpeg")
|
file = Rack::Test::UploadedFile.new("#{Rails.root}/test/files/test.jpg", "image/jpeg")
|
||||||
post_auth preprocess_uploads_path, @user, params: {:upload => {:source => "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg", :file => file}}
|
post_auth preprocess_uploads_path, @user, params: {:upload => {:source => "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg", :file => file}}
|
||||||
assert_response :success
|
assert_response :success
|
||||||
Delayed::Worker.new.work_off
|
perform_enqueued_jobs
|
||||||
assert_equal("ecef68c44edb8a0d6a3070b5f8e8ee76", Upload.last.md5)
|
assert_equal("ecef68c44edb8a0d6a3070b5f8e8ee76", Upload.last.md5)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -52,13 +52,14 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
should "preprocess" do
|
should "preprocess" do
|
||||||
assert_difference(-> { Upload.count }) do
|
assert_difference(-> { Upload.count }) do
|
||||||
get_auth new_upload_path, @user, params: {:url => "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg"}
|
get_auth new_upload_path, @user, params: {:url => "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg"}
|
||||||
|
perform_enqueued_jobs
|
||||||
assert_response :success
|
assert_response :success
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
should "prefer the file" do
|
should "prefer the file" do
|
||||||
get_auth new_upload_path, @user, params: {url: "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg"}
|
get_auth new_upload_path, @user, params: {url: "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg"}
|
||||||
Delayed::Worker.new.work_off
|
perform_enqueued_jobs
|
||||||
file = Rack::Test::UploadedFile.new("#{Rails.root}/test/files/test.jpg", "image/jpeg")
|
file = Rack::Test::UploadedFile.new("#{Rails.root}/test/files/test.jpg", "image/jpeg")
|
||||||
assert_difference(-> { Post.count }) do
|
assert_difference(-> { Post.count }) do
|
||||||
post_auth uploads_path, @user, params: {upload: {file: file, tag_string: "aaa", rating: "q", source: "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg"}}
|
post_auth uploads_path, @user, params: {upload: {file: file, tag_string: "aaa", rating: "q", source: "https://raikou1.donmai.us/d3/4e/d34e4cf0a437a5d65f8e82b7bcd02606.jpg"}}
|
||||||
@@ -77,7 +78,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
should "trigger the preprocessor" do
|
should "trigger the preprocessor" do
|
||||||
assert_difference(-> { Upload.preprocessed.count }, 1) do
|
assert_difference(-> { Upload.preprocessed.count }, 1) do
|
||||||
get_auth new_upload_path, @user, params: {:url => @source, :ref => @ref}
|
get_auth new_upload_path, @user, params: {:url => @source, :ref => @ref}
|
||||||
Delayed::Worker.new.work_off
|
perform_enqueued_jobs
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -97,7 +98,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
skip "Twitter keys are not set" unless Danbooru.config.twitter_api_key
|
skip "Twitter keys are not set" unless Danbooru.config.twitter_api_key
|
||||||
get_auth new_upload_path, @user, params: {:url => @source}
|
get_auth new_upload_path, @user, params: {:url => @source}
|
||||||
assert_response :success
|
assert_response :success
|
||||||
Delayed::Worker.new.work_off
|
perform_enqueued_jobs
|
||||||
upload = Upload.last
|
upload = Upload.last
|
||||||
assert_equal(@source, upload.source)
|
assert_equal(@source, upload.source)
|
||||||
end
|
end
|
||||||
@@ -112,7 +113,7 @@ class UploadsControllerTest < ActionDispatch::IntegrationTest
|
|||||||
should "trigger the preprocessor" do
|
should "trigger the preprocessor" do
|
||||||
assert_difference(-> { Upload.preprocessed.count }, 1) do
|
assert_difference(-> { Upload.preprocessed.count }, 1) do
|
||||||
get_auth new_upload_path, @user, params: {:url => @source, :ref => @ref}
|
get_auth new_upload_path, @user, params: {:url => @source, :ref => @ref}
|
||||||
Delayed::Worker.new.work_off
|
perform_enqueued_jobs
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -14,14 +14,6 @@ class UploadServiceTest < ActiveSupport::TestCase
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setup do
|
|
||||||
Delayed::Worker.delay_jobs = true
|
|
||||||
end
|
|
||||||
|
|
||||||
teardown do
|
|
||||||
Delayed::Worker.delay_jobs = false
|
|
||||||
end
|
|
||||||
|
|
||||||
context "::Utils" do
|
context "::Utils" do
|
||||||
subject { UploadService::Utils }
|
subject { UploadService::Utils }
|
||||||
|
|
||||||
@@ -1044,10 +1036,9 @@ class UploadServiceTest < ActiveSupport::TestCase
|
|||||||
should "schedule a job later" do
|
should "schedule a job later" do
|
||||||
service = subject.new(source: @source)
|
service = subject.new(source: @source)
|
||||||
|
|
||||||
assert_difference(-> { Delayed::Job.count }) do
|
predecessor = service.start!
|
||||||
predecessor = service.start!
|
assert_enqueued_jobs(1, only: UploadServiceDelayedStartJob)
|
||||||
assert_equal(@predecessor, predecessor)
|
assert_equal(@predecessor, predecessor)
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,4 @@ class ActionDispatch::IntegrationTest
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
Delayed::Worker.delay_jobs = false
|
|
||||||
|
|
||||||
Rails.application.load_seed
|
Rails.application.load_seed
|
||||||
|
|||||||
@@ -36,17 +36,12 @@ class PostTest < ActiveSupport::TestCase
|
|||||||
context "Deletion:" do
|
context "Deletion:" do
|
||||||
context "Expunging a post" do
|
context "Expunging a post" do
|
||||||
setup do
|
setup do
|
||||||
Delayed::Worker.delay_jobs = true
|
|
||||||
@upload = UploadService.new(FactoryBot.attributes_for(:jpg_upload)).start!
|
@upload = UploadService.new(FactoryBot.attributes_for(:jpg_upload)).start!
|
||||||
@post = @upload.post
|
@post = @upload.post
|
||||||
Favorite.add(post: @post, user: @user)
|
Favorite.add(post: @post, user: @user)
|
||||||
create(:favorite_group).add!(@post.id)
|
create(:favorite_group).add!(@post.id)
|
||||||
end
|
end
|
||||||
|
|
||||||
teardown do
|
|
||||||
Delayed::Worker.delay_jobs = false
|
|
||||||
end
|
|
||||||
|
|
||||||
should "delete the files" do
|
should "delete the files" do
|
||||||
assert_nothing_raised { @post.file(:preview) }
|
assert_nothing_raised { @post.file(:preview) }
|
||||||
assert_nothing_raised { @post.file(:original) }
|
assert_nothing_raised { @post.file(:original) }
|
||||||
|
|||||||
Reference in New Issue
Block a user