diff options
-rw-r--r-- | lib/puppet/network/client/master.rb | 16 | ||||
-rwxr-xr-x | spec/unit/network/client/master.rb | 42 |
2 files changed, 50 insertions, 8 deletions
diff --git a/lib/puppet/network/client/master.rb b/lib/puppet/network/client/master.rb index 6f8e2770f..5e9422b7e 100644 --- a/lib/puppet/network/client/master.rb +++ b/lib/puppet/network/client/master.rb @@ -199,6 +199,7 @@ class Puppet::Network::Client::Master < Puppet::Network::Client self.class.instance = self @running = false + @splayed = false end # Mark that we should restart. The Puppet module checks whether we're running, @@ -478,20 +479,19 @@ class Puppet::Network::Client::Master < Puppet::Network::Client @lockfile end + def splayed? + @splayed + end + # Sleep when splay is enabled; else just return. def splay return unless Puppet[:splay] + return if splayed? - limit = Integer(Puppet[:splaylimit]) - - # Pick a splay time and then cache it. - unless time = Puppet::Util::Storage.cache(:configuration)[:splay_time] - time = rand(limit) - Puppet::Util::Storage.cache(:configuration)[:splay_time] = time - end - + time = rand(Integer(Puppet[:splaylimit])) Puppet.info "Sleeping for %s seconds (splay is enabled)" % time sleep(time) + @splayed = true end private diff --git a/spec/unit/network/client/master.rb b/spec/unit/network/client/master.rb index 754fd0583..f55ba316c 100755 --- a/spec/unit/network/client/master.rb +++ b/spec/unit/network/client/master.rb @@ -397,4 +397,46 @@ describe Puppet::Network::Client::Master, " when using the cached catalog" do @client.catalog.should equal(ral_config) end + + describe "when calling splay" do + it "should do nothing if splay is not enabled" do + Puppet.stubs(:[]).with(:splay).returns(false) + @client.expects(:rand).never + @client.send(:splay) + end + + describe "when splay is enabled" do + before do + Puppet.stubs(:[]).with(:splay).returns(true) + Puppet.stubs(:[]).with(:splaylimit).returns(42) + end + + it "should sleep for a random time" do + @client.expects(:rand).with(42).returns(42) + @client.expects(:sleep).with(42) + @client.send(:splay) + end + + it "should inform that it is splayed" do + @client.stubs(:rand).with(42).returns(42) + @client.stubs(:sleep).with(42) + Puppet.expects(:info) + @client.send(:splay) + end + + it "should set splay = true" do + @client.stubs(:rand).with(42).returns(42) + @client.stubs(:sleep).with(42) + @client.send(:splay) + @client.send(:splayed?).should == true + end + + it "should do nothing if already splayed" do + @client.stubs(:rand).with(42).returns(42).at_most_once + @client.stubs(:sleep).with(42).at_most_once + @client.send(:splay) + @client.send(:splay) + end + end + end end |