mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: Add multisite support to Sidekiq::Pausable. (#6960)
Having a global Sidekiq pause switch is problematic because a site in the cluster can pause Sidekiq for the entire cluster.
This commit is contained in:
89
spec/multisite/pausable_spec.rb
Normal file
89
spec/multisite/pausable_spec.rb
Normal file
@@ -0,0 +1,89 @@
|
||||
require 'rails_helper'
|
||||
require_dependency 'sidekiq/pausable'
|
||||
|
||||
RSpec.describe "Pausing/Unpausing Sidekiq", type: :multisite do
|
||||
after do
|
||||
$redis.flushall
|
||||
end
|
||||
|
||||
describe '#pause!, #unpause! and #paused?' do
|
||||
it "can pause and unpause" do
|
||||
Sidekiq.pause!
|
||||
expect(Sidekiq.paused?).to eq(true)
|
||||
|
||||
test_multisite_connection('second') do
|
||||
expect(Sidekiq.paused?).to eq(false)
|
||||
end
|
||||
|
||||
Sidekiq.unpause!
|
||||
|
||||
expect(Sidekiq.paused?).to eq(false)
|
||||
|
||||
test_multisite_connection('second') do
|
||||
Sidekiq.pause!
|
||||
expect(Sidekiq.paused?).to eq(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.describe Sidekiq::Pausable do
|
||||
after do
|
||||
$redis.flushall
|
||||
end
|
||||
|
||||
it "can still run heartbeats when paused" do
|
||||
Sidekiq.pause!
|
||||
|
||||
freeze_time 1.week.from_now
|
||||
|
||||
jobs = Sidekiq::ScheduledSet.new
|
||||
jobs.clear
|
||||
middleware = Sidekiq::Pausable.new
|
||||
|
||||
middleware.call(Jobs::RunHeartbeat.new, { "args" => [{}] }, "critical") do
|
||||
"done"
|
||||
end
|
||||
|
||||
jobs = Sidekiq::ScheduledSet.new
|
||||
expect(jobs.size).to eq(0)
|
||||
end
|
||||
|
||||
describe 'when sidekiq is paused', type: :multisite do
|
||||
let(:middleware) { Sidekiq::Pausable.new }
|
||||
|
||||
def call_middleware(db = RailsMultisite::ConnectionManagement::DEFAULT)
|
||||
middleware.call(Jobs::PostAlert.new, {
|
||||
"args" => [{ "current_site_id" => db }]
|
||||
}, "critical") do
|
||||
yield
|
||||
end
|
||||
end
|
||||
|
||||
it 'should delay the job' do
|
||||
Sidekiq.pause!
|
||||
|
||||
called = false
|
||||
called2 = false
|
||||
call_middleware { called = true }
|
||||
|
||||
expect(called).to eq(false)
|
||||
|
||||
test_multisite_connection('second') do
|
||||
call_middleware('second') { called2 = true }
|
||||
expect(called2).to eq(true)
|
||||
end
|
||||
|
||||
Sidekiq.unpause!
|
||||
call_middleware { called = true }
|
||||
|
||||
expect(called).to eq(true)
|
||||
|
||||
test_multisite_connection('second') do
|
||||
Sidekiq.pause!
|
||||
call_middleware('second') { called2 = false }
|
||||
expect(called2).to eq(true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user