diff options
author | Claire McQuin <claire@getchef.com> | 2014-09-25 14:33:49 -0700 |
---|---|---|
committer | Claire McQuin <claire@getchef.com> | 2014-10-01 14:31:05 -0700 |
commit | c7ba8374732a63b66aac5d909121e57abdd86938 (patch) | |
tree | 1d1b4b99abadf53b18eb36f7abb02037c2563733 | |
parent | 97b628a766d14a6a8fe6b3b2febb604a570e0cde (diff) | |
download | chef-c7ba8374732a63b66aac5d909121e57abdd86938.tar.gz |
Do interval and splay sleep before running client.
-rw-r--r-- | lib/chef/application/client.rb | 33 | ||||
-rw-r--r-- | lib/chef/application/solo.rb | 18 |
2 files changed, 26 insertions, 25 deletions
diff --git a/lib/chef/application/client.rb b/lib/chef/application/client.rb index 4b96e89e42..aa394cb911 100644 --- a/lib/chef/application/client.rb +++ b/lib/chef/application/client.rb @@ -316,7 +316,10 @@ class Chef::Application::Client < Chef::Application end end end + end + # Run the chef client, optionally daemonizing or looping at intervals. + def run_application if Chef::Config[:version] puts "Chef version: #{::Chef::VERSION}" end @@ -347,28 +350,20 @@ class Chef::Application::Client < Chef::Application begin Chef::Application.exit!("Exiting", 0) if signal == GRACEFUL_EXIT_SIGNAL - if Chef::Config[:splay] and signal != IMMEDIATE_RUN_SIGNAL - splay = rand Chef::Config[:splay] - Chef::Log.debug("Splay sleep #{splay} seconds") - sleep splay + if signal != IMMEDIATE_RUN_SIGNAL + signal = interval_sleep(time_to_sleep) end signal = nil run_chef_client(Chef::Config[:specific_recipes]) - if Chef::Config[:interval] - Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds") - signal = interval_sleep - else - Chef::Application.exit! "Exiting", 0 - end + Chef::Application.exit!("Exiting", 0) if !Chef::Config[:interval] rescue SystemExit => e raise rescue Exception => e if Chef::Config[:interval] Chef::Log.error("#{e.class}: #{e}") - Chef::Log.error("Sleeping for #{Chef::Config[:interval]} seconds before trying again") - signal = interval_sleep + Chef::Log.debug("#{e.class}: #{e}\n#{e.backtrace.join("\n")}") retry else Chef::Application.fatal!("#{e.class}: #{e.message}", 1) @@ -377,12 +372,20 @@ class Chef::Application::Client < Chef::Application end end - def interval_sleep + def time_to_sleep + duration = 0 + duration += rand(Chef::Config[:splay]) if Chef::Config[:splay] + duration += Chef::Config[:interval] if Chef::Config[:interval] + duration + end + + def interval_sleep(sec) + Chef::Log.debug("Sleeping for #{sec} seconds") unless SELF_PIPE.empty? - client_sleep Chef::Config[:interval] + client_sleep(sec) else # Windows - sleep Chef::Config[:interval] + sleep(sec) end end diff --git a/lib/chef/application/solo.rb b/lib/chef/application/solo.rb index cf7b5b4223..474bbf3f6c 100644 --- a/lib/chef/application/solo.rb +++ b/lib/chef/application/solo.rb @@ -233,17 +233,17 @@ class Chef::Application::Solo < Chef::Application loop do begin - if Chef::Config[:splay] - splay = rand Chef::Config[:splay] - Chef::Log.debug("Splay sleep #{splay} seconds") - sleep splay + + sleep_sec = 0 + sleep_sec += rand(Chef::Config[:splay]) if Chef::Config[:splay] + sleep_sec += Chef::Config[:interval] if Chef::Config[:interval] + if sleep_sec != 0 + Chef::Log.debug("Sleeping for #{sleep_sec} seconds") + sleep(sleep_sec) end run_chef_client - if Chef::Config[:interval] - Chef::Log.debug("Sleeping for #{Chef::Config[:interval]} seconds") - sleep Chef::Config[:interval] - else + if !Chef::Config[:interval] Chef::Application.exit! "Exiting", 0 end rescue SystemExit => e @@ -252,8 +252,6 @@ class Chef::Application::Solo < Chef::Application if Chef::Config[:interval] Chef::Log.error("#{e.class}: #{e}") Chef::Log.debug("#{e.class}: #{e}\n#{e.backtrace.join("\n")}") - Chef::Log.fatal("Sleeping for #{Chef::Config[:interval]} seconds before trying again") - sleep Chef::Config[:interval] retry else Chef::Application.fatal!("#{e.class}: #{e.message}", 1) |