Skip to content

Commit

Permalink
Update splaylimit during daemon run
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
mhashizume committed May 31, 2024
1 parent ca922ca commit 54283ff
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/puppet/daemon.rb
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ def run_event_loop
reparse_run = Puppet::Scheduler.create_job(Puppet[:filetimeout]) do
Puppet.settings.reparse_config_files
agent_run.run_interval = Puppet[:runinterval]
agent_run.splay_limit = Puppet[:splaylimit] if Puppet[:splay]
if Puppet[:filetimeout] == 0
reparse_run.disable
else
Expand Down
9 changes: 9 additions & 0 deletions lib/puppet/scheduler/splay_job.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ def ready?(time)
end
end

# Recalculates splay.
#
# @param splay_limit [Integer] the maximum time (in seconds) to delay before an agent's first run.
# @return @splay [Integer] a random integer less than or equal to the splay limit that represents the seconds to
# delay before next agent run.
def splay_limit=(splay_limit)
@splay = calculate_splay(splay_limit)
end

private

def calculate_splay(limit)
Expand Down
11 changes: 11 additions & 0 deletions spec/unit/daemon_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,17 @@ def run_loop(jobs)
daemon.start
expect(scheduler.jobs[0]).not_to be_enabled
end

it "recalculates splay if splaylimit changes" do
# Set file timeout so the daemon reparses
Puppet[:filetimeout] = 1
Puppet[:splay] = true
allow(agent).to receive(:run)
daemon.start
first_splay = scheduler.jobs[1].splay
scheduler.jobs[0].run(Time.now)
expect(scheduler.jobs[1].splay).to_not eq(first_splay)
end
end

describe "when stopping" do
Expand Down

0 comments on commit 54283ff

Please sign in to comment.