1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

[core] allow eventual consistency in wait_for

closes #102
This commit is contained in:
geemus 2010-12-16 12:05:15 -08:00
parent d6c78366cc
commit e28b05ac86
3 changed files with 11 additions and 15 deletions

View file

@ -167,7 +167,7 @@ module Fog
Timeout::timeout(4) do
Fog::SSH.new(ip_address, username, credentials).run(commands)
end
rescue Timeout::Error
rescue Net::SSH::AuthenticationFailed, Timeout::Error
retry
end
end

View file

@ -98,19 +98,7 @@ module Fog
end
server.save
# eventual consistency sometimes means a delay before it appears
retries = 3
begin
server.wait_for { ready? }
rescue Fog::Errors::Error => error
sleep(1)
retries -= 1
if retries > 0
retry
else
raise error
end
end
server.wait_for { ready? }
server.setup(:key_data => [server.private_key])
server
end

View file

@ -39,7 +39,15 @@ module Fog
def wait_for(timeout=600, interval=1, &block)
reload
Fog.wait_for(timeout, interval) do
reload or raise Fog::Errors::Error.new("Reload failed, #{self.class} #{self.identity} went away.")
retries = 3
if reload
retries = 3
elsif retries > 0
retries -= 1
sleep(1)
elsif retries == 0
raise Fog::Errors::Error.new("Reload failed, #{self.class} #{self.identity} went away.")
end
instance_eval(&block)
end
end