diff --git a/lib/scheduler/manager.rb b/lib/scheduler/manager.rb index ec8e249e9b..3cbff459a4 100644 --- a/lib/scheduler/manager.rb +++ b/lib/scheduler/manager.rb @@ -34,16 +34,7 @@ module Scheduler end @thread = Thread.new do while !@stopped - if @manager.enable_stats - begin - RailsMultisite::ConnectionManagement.establish_connection(db: "default") - process_queue - ensure - ActiveRecord::Base.connection_handler.clear_active_connections! - end - else - process_queue - end + process_queue end end end @@ -69,6 +60,7 @@ module Scheduler end def process_queue + klass = @queue.deq return unless klass @@ -83,15 +75,23 @@ module Scheduler begin info.prev_result = "RUNNING" @mutex.synchronize { info.write! } + if @manager.enable_stats - stat = SchedulerStat.create!( - name: klass.to_s, - hostname: hostname, - pid: Process.pid, - started_at: Time.zone.now, - live_slots_start: GC.stat[:heap_live_slots] - ) + begin + RailsMultisite::ConnectionManagement.establish_connection(db: "default") + + stat = SchedulerStat.create!( + name: klass.to_s, + hostname: hostname, + pid: Process.pid, + started_at: Time.zone.now, + live_slots_start: GC.stat[:heap_live_slots] + ) + ensure + ActiveRecord::Base.connection_handler.clear_active_connections! + end end + klass.new.perform rescue => e if e.class != Jobs::HandledExceptionWrapper @@ -120,6 +120,8 @@ module Scheduler Discourse.handle_job_exception(ex, {message: "Processing scheduled job queue"}) ensure @running = false + + ActiveRecord::Base.connection_handler.clear_active_connections! end def stop! diff --git a/spec/components/demon/base_spec.rb b/spec/components/demon/base_spec.rb deleted file mode 100644 index 1f1615fc63..0000000000 --- a/spec/components/demon/base_spec.rb +++ /dev/null @@ -1,40 +0,0 @@ -require 'rails_helper' -require 'demon/base' - -describe Demon do - - class RudeDemon < Demon::Base - def self.prefix - "rude" - end - - def after_fork - Signal.trap("HUP"){} - Signal.trap("TERM"){} - sleep 999999 - end - end - - it "can terminate rude demons" do - - skip("forking rspec has side effects") - # Forking rspec has all sorts of weird side effects - # this spec works but we must skip it to keep rspec - # state happy - - - RudeDemon.start - _,demon = RudeDemon.demons.first - pid = demon.pid - wait_for { - demon.alive? - } - - demon.stop_timeout = 0.05 - demon.stop - demon.start - - running = !!(Process.kill(0, pid)) rescue false - expect(running).to eq(false) - end -end diff --git a/spec/components/pretty_text_spec.rb b/spec/components/pretty_text_spec.rb index 6175a1e120..5a5f91d38a 100644 --- a/spec/components/pretty_text_spec.rb +++ b/spec/components/pretty_text_spec.rb @@ -16,11 +16,6 @@ describe PrettyText do n(PrettyText.cook(*args)) end - # see: https://github.com/sparklemotion/nokogiri/issues/1173 - skip 'allows html entities correctly' do - expect(PrettyText.cook("ℵ£¢")).to eq("

ℵ£¢

") - end - let(:wrapped_image) { "
\nScreen Shot 2014-04-14 at 9.47.10 PM.png966x737 1.47 MB\n
" } let(:wrapped_image_excerpt) { } diff --git a/spec/components/scheduler/manager_spec.rb b/spec/components/scheduler/manager_spec.rb index 3dc699a1f6..a3de968893 100644 --- a/spec/components/scheduler/manager_spec.rb +++ b/spec/components/scheduler/manager_spec.rb @@ -59,11 +59,11 @@ describe Scheduler::Manager do } before { - expect(ActiveRecord::Base.connection_pool.connections.length).to eq(1) + expect(ActiveRecord::Base.connection_pool.connections.reject{|c| !c.in_use?}.length).to eq(1) } after { - expect(ActiveRecord::Base.connection_pool.connections.length).to eq(1) + expect(ActiveRecord::Base.connection_pool.connections.reject{|c| !c.in_use?}.length).to eq(1) } it 'can disable stats' do @@ -126,7 +126,7 @@ describe Scheduler::Manager do expect($redis.zcard(Scheduler::Manager.queue_key)).to eq(0) end - skip 'should recover from crashed manager' do + it 'should recover from crashed manager' do info = manager.schedule_info(Testing::SuperLongJob) info.next_run = Time.now.to_i - 1 @@ -145,7 +145,7 @@ describe Scheduler::Manager do end # something about logging jobs causing a leak in connection pool in test - skip 'should log when job finishes running' do + it 'should log when job finishes running' do Testing::RandomJob.runs = 0