You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by mf...@apache.org on 2012/01/24 15:42:12 UTC
svn commit: r1235273 - in /deltacloud/trunk: client/lib/deltacloud.rb
server/views/errors/500.xml.haml
Author: mfojtik
Date: Tue Jan 24 14:42:12 2012
New Revision: 1235273
URL: http://svn.apache.org/viewvc?rev=1235273&view=rev
Log:
Client: Ruby client should now forward backtrace from the server to client
Signed-off-by: Michal fojtik <mf...@redhat.com>
Modified:
deltacloud/trunk/client/lib/deltacloud.rb
deltacloud/trunk/server/views/errors/500.xml.haml
Modified: deltacloud/trunk/client/lib/deltacloud.rb
URL: http://svn.apache.org/viewvc/deltacloud/trunk/client/lib/deltacloud.rb?rev=1235273&r1=1235272&r2=1235273&view=diff
==============================================================================
--- deltacloud/trunk/client/lib/deltacloud.rb (original)
+++ deltacloud/trunk/client/lib/deltacloud.rb Tue Jan 24 14:42:12 2012
@@ -359,7 +359,7 @@ module DeltaCloud
if conf[:method].eql?(:post)
resource = RestClient::Resource.new(conf[:path], :open_timeout => conf[:open_timeout], :timeout => conf[:timeout])
resource.send(:post, conf[:form_data], default_headers.merge(extended_headers)) do |response, request, block|
- handle_backend_error(response) if [500, 502].include? response.code
+ handle_backend_error(response) if [500, 502, 501].include? response.code
if response.respond_to?('body')
yield response.body if block_given?
else
@@ -369,7 +369,7 @@ module DeltaCloud
else
resource = RestClient::Resource.new(conf[:path], :open_timeout => conf[:open_timeout], :timeout => conf[:timeout])
resource.send(conf[:method], default_headers.merge(extended_headers)) do |response, request, block|
- handle_backend_error(response) if [500, 502].include? response.code
+ handle_backend_error(response) if [500, 502, 501].include? response.code
if conf[:method].eql?(:get) and [301, 302, 307].include? response.code
response.follow_redirection(request) do |response, request, block|
if response.respond_to?('body')
@@ -392,16 +392,20 @@ module DeltaCloud
# Re-raise backend errors as on exception in client with message from
# backend
class BackendError < StandardError
+
def initialize(opts={})
- @message = "[#{opts[:code]}] #{opts[:message]}"
- end
- def message
- @message
+ super("#{opts[:code]} : #{opts[:message]}")
+ set_backtrace(opts[:backtrace].split("\n").map { |l| l.strip }[0..10]) if opts[:backtrace]
end
+
end
def handle_backend_error(response)
- raise BackendError.new(:message => (Nokogiri::XML(response)/'error/message').text, :code => response.code)
+ response_xml = Nokogiri::XML(response)
+ backtrace = (response_xml/'error/backtrace').empty? ? nil : (response_xml/'error/backtrace').text
+ raise BackendError.new(:message => (response_xml/'error/message').text,
+ :code => response.code,
+ :backtrace => backtrace)
end
# Check if specified collection have wanted feature
Modified: deltacloud/trunk/server/views/errors/500.xml.haml
URL: http://svn.apache.org/viewvc/deltacloud/trunk/server/views/errors/500.xml.haml?rev=1235273&r1=1235272&r2=1235273&view=diff
==============================================================================
--- deltacloud/trunk/server/views/errors/500.xml.haml (original)
+++ deltacloud/trunk/server/views/errors/500.xml.haml Tue Jan 24 14:42:12 2012
@@ -3,10 +3,9 @@
%backend{ :driver => driver_symbol, :provider => "#{Thread::current[:provider] || ENV['API_PROVIDER'] || 'default'}" }
%code=response.status
%message< #{cdata @error.message}
+ - if @error.respond_to? :backtrace
+ %backtrace=cdata @error.backtrace.join("\n")
- if params
%request
- params.each do |k, v|
%param{ :name => k}=v
- - if @error.respond_to? :backtrace
- %backtrace=@error.backtrace.join("\n")
-