diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-11-10 09:22:49 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-11-10 09:22:49 +0000 |
commit | 7b4f4a079e1fa86aab41b7d8238ca07593159eb9 (patch) | |
tree | 7c2b40a0e7c2cbcc70efd3512b397a6d0bf05035 | |
parent | febf8fc2aab898218333e245bab4bda972de5692 (diff) | |
download | mogilefs-client-7b4f4a079e1fa86aab41b7d8238ca07593159eb9.tar.gz |
Each backend could have a different story to tell
-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 ## |