PERF: Quit out of the email job quickly if disabled (#6423)
This prevents sidekiq from doing a bunch of queries when email is disabled. Critical emails are a special case and will be sent.
This commit is contained in:
parent
75c77c7e7e
commit
02da022c70
|
@ -6,6 +6,10 @@ module Jobs
|
|||
|
||||
sidekiq_options queue: 'critical'
|
||||
|
||||
def quit_email_early?
|
||||
false
|
||||
end
|
||||
|
||||
def execute(args)
|
||||
super(args)
|
||||
end
|
||||
|
|
|
@ -9,10 +9,20 @@ module Jobs
|
|||
|
||||
sidekiq_options queue: 'low'
|
||||
|
||||
# Can be overridden by subclass, for example critical email
|
||||
# should always consider being sent
|
||||
def quit_email_early?
|
||||
SiteSetting.disable_emails == 'yes'
|
||||
end
|
||||
|
||||
def execute(args)
|
||||
raise Discourse::InvalidParameters.new(:user_id) unless args[:user_id].present?
|
||||
raise Discourse::InvalidParameters.new(:type) unless args[:type].present?
|
||||
|
||||
# This is for performance. Quit out fast without doing a bunch
|
||||
# of extra work when emails are disabled.
|
||||
return if quit_email_early?
|
||||
|
||||
post = nil
|
||||
notification = nil
|
||||
type = args[:type]
|
||||
|
|
|
@ -58,6 +58,26 @@ describe Jobs::UserEmail do
|
|||
end
|
||||
end
|
||||
|
||||
context "disable_emails setting" do
|
||||
it "sends when no" do
|
||||
SiteSetting.disable_emails = 'no'
|
||||
Email::Sender.any_instance.expects(:send).once
|
||||
Jobs::UserEmail.new.execute(type: :confirm_new_email, user_id: user.id)
|
||||
end
|
||||
|
||||
it "does not send an email when yes" do
|
||||
SiteSetting.disable_emails = 'yes'
|
||||
Email::Sender.any_instance.expects(:send).never
|
||||
Jobs::UserEmail.new.execute(type: :confirm_new_email, user_id: user.id)
|
||||
end
|
||||
|
||||
it "sends when critical" do
|
||||
SiteSetting.disable_emails = 'yes'
|
||||
Email::Sender.any_instance.expects(:send)
|
||||
Jobs::CriticalUserEmail.new.execute(type: :confirm_new_email, user_id: user.id)
|
||||
end
|
||||
end
|
||||
|
||||
context "recently seen" do
|
||||
let(:post) { Fabricate(:post, user: user) }
|
||||
|
||||
|
|
Loading…
Reference in New Issue