可以清楚的看到一个判断,然后抛出异常,没有任何的重试机制....,为此我很确信我的web,它如果能有一次重试的机会,那么下一次一定能正常获得返回值, 然后我就给了它很多次的机会。。。
#raise "Error retrieving node #{certname}: #{res.class}" unless res.code == "200"
while res.code != "200"
res = http.start { |http| http.request(req) }
puts "Error retrieving node #{certname}: #{res.class}" sleep 3
end
这时有些人可能会想,while 循环,加3秒重试,,如果一直不成功怎么办?
在脚本最开头会有配置timeout的地方,在timeout到了之后,会关闭http连接,然后读取cache。
# query External node
begin
result = ""
timeout(tsecs) do
result = enc(certname)
cache(certname, result)
end
rescue TimeoutError, SocketError, Errno::EHOSTUNREACH, Errno::ECONNREFUSED
# Read from cache, we got some sort of an error.
result = read_cache(certname)
这段代码可以很清晰的看出,在timeout没超时时会调用enc这个方法返回结果,然后在调用cache方法写入到cache文件
如果超时或http错误,则读取cache,但是这里的异常不包括...,HTTP的...,如果如果是4XX的错误,不会触发读取cache的异常..
Puppet 学习系列:
相关阅读:
有关Puppet agent端三种备份恢复方案探讨研究
选择更安全的方式注册你的Puppet节点
通过配置SSH深刻理解Puppet的语法及工作机制
Puppet利用Nginx多端口实现负载均衡
CentOS(5和6)下Puppet的C/S模式实例