Skip to content

Commit 7eb8ca0

Browse files
committed
Update splaylimit during daemon run
Prior to this commit, updates to splay settings in the Puppet configuration file (puppet.conf) would not get picked up in a daemonized Puppet run. This commit updates the daemon class to call a new public method in the splay job class to update the splaylimit.
1 parent ca922ca commit 7eb8ca0

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

lib/puppet/daemon.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ def run_event_loop
165165
reparse_run = Puppet::Scheduler.create_job(Puppet[:filetimeout]) do
166166
Puppet.settings.reparse_config_files
167167
agent_run.run_interval = Puppet[:runinterval]
168+
agent_run.splay_limit = Puppet[:splaylimit] if Puppet[:splay]
168169
if Puppet[:filetimeout] == 0
169170
reparse_run.disable
170171
else

lib/puppet/scheduler/splay_job.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ def ready?(time)
2525
end
2626
end
2727

28+
# Recalculates splay.
29+
#
30+
# @param splay_limit [Integer] the maximum time (in seconds) to delay before an agent's first run.
31+
# @return @splay [Integer] a random integer less than or equal to the splay limit that represents the seconds to
32+
# delay before next agent run.
33+
def splay_limit=(splay_limit)
34+
@splay = calculate_splay(splay_limit)
35+
end
36+
2837
private
2938

3039
def calculate_splay(limit)

spec/unit/daemon_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,18 @@ def run_loop(jobs)
7979
daemon.start
8080
expect(scheduler.jobs[0]).not_to be_enabled
8181
end
82+
83+
it "recalculates splay if splaylimit changes" do
84+
# Set file timeout so the daemon reparses
85+
Puppet[:filetimeout] = 1
86+
Puppet[:splay] = true
87+
allow(agent).to receive(:run)
88+
daemon.start
89+
first_splay = scheduler.jobs[1].splay
90+
allow(Kernel).to receive(:rand).and_return(1738)
91+
scheduler.jobs[0].run(Time.now)
92+
expect(scheduler.jobs[1].splay).to_not eq(first_splay)
93+
end
8294
end
8395

8496
describe "when stopping" do

0 commit comments

Comments
 (0)