diff options
-rw-r--r-- | lib/mogilefs.rb | 4 | ||||
-rw-r--r-- | lib/mogilefs/backend.rb | 12 |
2 files changed, 8 insertions, 8 deletions
diff --git a/lib/mogilefs.rb b/lib/mogilefs.rb index 9ed0a32..506d64b 100644 --- a/lib/mogilefs.rb +++ b/lib/mogilefs.rb @@ -23,9 +23,7 @@ module MogileFS class UnsupportedPathError < Error; end class RequestTruncatedError < Error; end class InvalidResponseError < Error; end - class UnreachableBackendError < Error - def message; "couldn't connect to mogilefsd backend"; end - end + class UnreachableBackendError < Error; end # IO.copy_stream was buggy in Ruby 1.9.2 and earlier if RUBY_VERSION >= "1.9.3" diff --git a/lib/mogilefs/backend.rb b/lib/mogilefs/backend.rb index 8b9dc6d..17f7b67 100644 --- a/lib/mogilefs/backend.rb +++ b/lib/mogilefs/backend.rb @@ -170,8 +170,8 @@ class MogileFS::Backend io = socket begin io.timed_write(request, @timeout) - rescue SystemCallError - @dead[@active_host] = Time.now + rescue SystemCallError => err + @dead[@active_host] = [ Time.now, err ] shutdown_unlocked io = socket retry @@ -240,21 +240,23 @@ class MogileFS::Backend now = Time.now @hosts.shuffle.each do |host| - next if @dead.include? host and @dead[host] > now - 5 + next if @dead.include?(host) and @dead[host][0] > now - 5 begin addr, port = host.split(/:/) @socket = MogileFS::Socket.tcp(addr, port, @timeout) @active_host = host rescue SystemCallError, MogileFS::Timeout => err - @dead[host] = now + @dead[host] = [ now, err ] next end return @socket end - raise MogileFS::UnreachableBackendError + errors = @dead.map { |host,(_,e)| "#{host} - #{e.message} (#{e.class})" } + raise MogileFS::UnreachableBackendError, + "couldn't connect to any tracker: #{errors.join(', ')}" end ## |