diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/mogilefs/backend.rb | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/mogilefs/backend.rb b/lib/mogilefs/backend.rb index afc2f1a..b9fc886 100644 --- a/lib/mogilefs/backend.rb +++ b/lib/mogilefs/backend.rb @@ -138,12 +138,17 @@ class MogileFS::Backend end def dispatch_unlocked(request, timeout = @timeout) # :nodoc: + tries = nil begin io = socket io.timed_write(request, timeout) io - rescue SystemCallError, MogileFS::RequestTruncatedError => err - @dead[@active_host] = [ Time.now, err ] + rescue SystemCallError, MogileFS::RequestTruncatedError => err + tries ||= Hash.new { |tries,host| tries[host] = 0 } + nr = tries[@active_host] += 1 + if nr >= 2 + @dead[@active_host] = [ Time.now, err ] + end shutdown_unlocked retry end |