Skip to content

Commit a471237

Browse files
authored
Merge pull request #41 from basecamp/silence-scheduled-polling
Silence scheduler polling
2 parents 11cdc67 + a95855b commit a471237

File tree

4 files changed

+59
-15
lines changed

4 files changed

+59
-15
lines changed

lib/solid_queue/runner.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,13 @@ def all_work_completed?
104104
def running_inline?
105105
mode.inline?
106106
end
107+
108+
def with_polling_volume
109+
if SolidQueue.silence_polling?
110+
ActiveRecord::Base.logger.silence { yield }
111+
else
112+
yield
113+
end
114+
end
107115
end
108116
end

lib/solid_queue/scheduler.rb

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@ def initialize(**options)
1414

1515
private
1616
def run
17-
batch = SolidQueue::ScheduledExecution.next_batch(batch_size)
17+
with_polling_volume do
18+
batch = SolidQueue::ScheduledExecution.next_batch(batch_size)
1819

19-
if batch.size > 0
20-
procline "preparing #{batch.size} jobs for execution"
20+
if batch.size > 0
21+
procline "preparing #{batch.size} jobs for execution"
2122

22-
SolidQueue::ScheduledExecution.prepare_batch(batch)
23-
else
24-
procline "waiting"
25-
interruptible_sleep(polling_interval)
23+
SolidQueue::ScheduledExecution.prepare_batch(batch)
24+
else
25+
procline "waiting"
26+
interruptible_sleep(polling_interval)
27+
end
2628
end
2729
end
2830

lib/solid_queue/worker.rb

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,5 @@ def all_work_completed?
4646
def metadata
4747
super.merge(queues: queues, thread_pool_size: pool.size, idle_threads: pool.idle_threads, polling_interval: polling_interval)
4848
end
49-
50-
def with_polling_volume
51-
if SolidQueue.silence_polling?
52-
ActiveRecord::Base.logger.silence { yield }
53-
else
54-
yield
55-
end
56-
end
5749
end
5850
end

test/unit/scheduler_test.rb

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
require "test_helper"
2+
require "active_support/testing/method_call_assertions"
3+
4+
class SchedulerTest < ActiveSupport::TestCase
5+
include ActiveSupport::Testing::MethodCallAssertions
6+
7+
setup do
8+
@scheduler = SolidQueue::Scheduler.new(polling_interval: 0.1, batch_size: 10)
9+
end
10+
11+
teardown do
12+
@scheduler.stop if @scheduler.running?
13+
end
14+
15+
test "polling queries are logged" do
16+
log = StringIO.new
17+
old_logger, ActiveRecord::Base.logger = ActiveRecord::Base.logger, ActiveSupport::Logger.new(log)
18+
old_silence_polling, SolidQueue.silence_polling = SolidQueue.silence_polling, false
19+
20+
@scheduler.start(mode: :async)
21+
sleep 0.5
22+
23+
assert_match /SELECT .* FROM .solid_queue_scheduled_executions. WHERE/, log.string
24+
ensure
25+
ActiveRecord::Base.logger = old_logger
26+
SolidQueue.silence_polling = old_silence_polling
27+
end
28+
29+
test "polling queries can be silenced" do
30+
log = StringIO.new
31+
old_logger, ActiveRecord::Base.logger = ActiveRecord::Base.logger, ActiveSupport::Logger.new(log)
32+
old_silence_polling, SolidQueue.silence_polling = SolidQueue.silence_polling, true
33+
34+
@scheduler.start(mode: :async)
35+
sleep 0.5
36+
37+
assert_no_match /SELECT .* FROM .solid_queue_scheduled_executions. WHERE/, log.string
38+
ensure
39+
ActiveRecord::Base.logger = old_logger
40+
SolidQueue.silence_polling = old_silence_polling
41+
end
42+
end

0 commit comments

Comments
 (0)