From 7b4f4a079e1fa86aab41b7d8238ca07593159eb9 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Thu, 10 Nov 2011 09:22:49 +0000 Subject: backend: more descriptive error for backends being unreachable Each backend could have a different story to tell --- lib/mogilefs.rb | 4 +--- 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 ## -- cgit v1.2.3-24-ge0c7