summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaire McQuin <claire@getchef.com>2014-09-25 14:33:49 -0700
committerClaire McQuin <claire@getchef.com>2014-10-01 14:31:05 -0700
commitc7ba8374732a63b66aac5d909121e57abdd86938 (patch)
tree1d1b4b99abadf53b18eb36f7abb02037c2563733
parent97b628a766d14a6a8fe6b3b2febb604a570e0cde (diff)
downloadchef-c7ba8374732a63b66aac5d909121e57abdd86938.tar.gz
Do interval and splay sleep before running client.
-rw-r--r--lib/chef/application/client.rb33
-rw-r--r--lib/chef/application/solo.rb18
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)