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 2011/06/20 12:42:42 UTC
svn commit: r1137591 - in /incubator/deltacloud/trunk/server:
lib/deltacloud/base_driver/ lib/deltacloud/drivers/mock/
lib/deltacloud/helpers/ lib/sinatra/ views/errors/
Author: mfojtik
Date: Mon Jun 20 10:42:41 2011
New Revision: 1137591
URL: http://svn.apache.org/viewvc?rev=1137591&view=rev
Log:
Cleanup and minor improvements in json error reporting
Modified:
incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/exceptions.rb
incubator/deltacloud/trunk/server/lib/deltacloud/drivers/mock/mock_driver.rb
incubator/deltacloud/trunk/server/lib/deltacloud/helpers/application_helper.rb
incubator/deltacloud/trunk/server/lib/deltacloud/helpers/json_helper.rb
incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb
incubator/deltacloud/trunk/server/views/errors/500.xml.haml
Modified: incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/exceptions.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/exceptions.rb?rev=1137591&r1=1137590&r2=1137591&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/exceptions.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/base_driver/exceptions.rb Mon Jun 20 10:42:41 2011
@@ -3,11 +3,10 @@ module Deltacloud
class DeltacloudException < StandardError
- attr_accessor :code, :name, :message, :backtrace, :request, :details
+ attr_accessor :code, :name, :message, :backtrace, :request
- def initialize(code, name, message, backtrace, details, request=nil)
+ def initialize(code, name, message, backtrace, request=nil)
@code, @name, @message = code, name, message
- @details = details
@backtrace = backtrace
@request = request
self
@@ -16,26 +15,30 @@ module Deltacloud
end
class AuthenticationFailure < DeltacloudException
- def initialize(e, details)
- super(401, e.class.name, e.message, e.backtrace, details)
+ def initialize(e, message=nil)
+ message ||= e.message
+ super(401, e.class.name, message, e.backtrace)
end
end
class ValidationFailure < DeltacloudException
- def initialize(e, details)
- super(400, e.class.name, e.message, e.backtrace, details)
+ def initialize(e, message=nil)
+ message ||= e.message
+ super(400, e.class.name, message, e.backtrace)
end
end
class BackendError < DeltacloudException
- def initialize(e, details)
- super(500, e.class.name, e.message, e.backtrace, details)
+ def initialize(e, message=nil)
+ message ||= e.message
+ super(500, e.class.name, message, e.backtrace, message)
end
end
class ProviderError < DeltacloudException
- def initialize(e, details)
- super(502, e.class.name, e.message, e.backtrace, details)
+ def initialize(e, message)
+ message ||= e.message
+ super(502, e.class.name, message, e.backtrace)
end
end
@@ -58,10 +61,6 @@ module Deltacloud
self.message = message
end
- def details(details)
- self.details = details
- end
-
def exception(handler)
self.handler = handler
end
@@ -79,10 +78,10 @@ module Deltacloud
def handler(e)
return @handler if @handler
case @status
- when 401 then Deltacloud::ExceptionHandler::AuthenticationFailure.new(e, @details)
- when 400 then Deltacloud::ExceptionHandler::ValidationFailure.new(e, @details)
- when 500 then Deltacloud::ExceptionHandler::BackendError.new(e, @details)
- when 502 then Deltacloud::ExceptionHandler::ProviderError.new(e, @details)
+ when 401 then Deltacloud::ExceptionHandler::AuthenticationFailure.new(e, @message)
+ when 400 then Deltacloud::ExceptionHandler::ValidationFailure.new(e, @message)
+ when 500 then Deltacloud::ExceptionHandler::BackendError.new(e, @message)
+ when 502 then Deltacloud::ExceptionHandler::ProviderError.new(e, @message)
end
end
Modified: incubator/deltacloud/trunk/server/lib/deltacloud/drivers/mock/mock_driver.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/drivers/mock/mock_driver.rb?rev=1137591&r1=1137590&r2=1137591&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/drivers/mock/mock_driver.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/drivers/mock/mock_driver.rb Mon Jun 20 10:42:41 2011
@@ -137,7 +137,7 @@ class MockDriver < Deltacloud::BaseDrive
def create_image(credentials, opts={})
check_credentials(credentials)
instance = instance(credentials, :id => opts[:instance_id])
- raise BackendError::new(500, 'CreateImageNotSupported', '', '') unless instance.can_create_image?
+ raise 'CreateImageNotSupported' unless instance.can_create_image?
ids = Dir[ "#{@storage_root}/images/*.yml" ].collect{|e| File.basename( e, ".yml" )}
count = 0
while true
@@ -324,8 +324,7 @@ class MockDriver < Deltacloud::BaseDrive
}
key_dir = File.join(@storage_root, 'keys')
if File.exists?(key_dir + "/#{key_hash[:id]}.yml")
- raise Deltacloud::BackendError.new(403, self.class.to_s, "key-exists",
- ["Key with same name already exists"])
+ raise "KeyExist"
end
FileUtils.mkdir_p(key_dir) unless File.directory?(key_dir)
File.open(key_dir + "/#{key_hash[:id]}.yml", 'w') do |f|
@@ -387,7 +386,7 @@ class MockDriver < Deltacloud::BaseDrive
check_credentials(credentials)
bucket = bucket(credentials, {:id => name})
unless (bucket.size == "0")
- raise Deltacloud::BackendError.new(403, self.class.to_s, "bucket-not-empty", "delete operation not valid for non-empty bucket")
+ raise "BucketNotEmpty"
end
safely do
File.delete(File::join(@storage_root, 'buckets', "#{name}.yml"))
@@ -451,7 +450,7 @@ class MockDriver < Deltacloud::BaseDrive
blobfile = File::join("#{@storage_root}", "buckets", "blobs", "#{blob_id}.yml")
safely do
unless File.exists?(blobfile)
- raise Deltacloud::BackendError.new(500, self.class.to_s, "blob #{blob_id} doesn't exist", "cannot delete non existant blob")
+ raise "NotExistentBlob"
end
File.delete(blobfile)
end
@@ -509,6 +508,26 @@ class MockDriver < Deltacloud::BaseDrive
on /AuthFailure/ do
status 401
+ message "Authentication Failure"
+ end
+
+ on /BucketNotEmpty/ do
+ status 403
+ message "Delete operation not valid for non-empty bucket"
+ end
+
+ on /KeyExist/ do
+ status 403
+ message "Key with same name already exists"
+ end
+
+ on /CreateImageNotSupported/ do
+ status 500
+ end
+
+ on /NotExistentBlob/ do
+ status 500
+ message "Could not delete a non existent blob"
end
on /Err/ do
Modified: incubator/deltacloud/trunk/server/lib/deltacloud/helpers/application_helper.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/helpers/application_helper.rb?rev=1137591&r1=1137590&r2=1137591&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/helpers/application_helper.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/helpers/application_helper.rb Mon Jun 20 10:42:41 2011
@@ -109,7 +109,8 @@ module ApplicationHelper
@code = 500 if not @code and not @error.class.method_defined? :code
response.status = @code || @error.code
respond_to do |format|
- format.xml { haml :"errors/#{@code || @error.code}", :layout => false }
+ format.xml { haml :"errors/#{@code || @error.code}", :layout => false }
+ format.json { json_return_error(@error) }
format.html { haml :"errors/#{@code || @error.code}", :layout => :error }
end
end
Modified: incubator/deltacloud/trunk/server/lib/deltacloud/helpers/json_helper.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/deltacloud/helpers/json_helper.rb?rev=1137591&r1=1137590&r2=1137591&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/deltacloud/helpers/json_helper.rb (original)
+++ incubator/deltacloud/trunk/server/lib/deltacloud/helpers/json_helper.rb Mon Jun 20 10:42:41 2011
@@ -20,4 +20,12 @@ module JSONHelper
features.empty? ? {} : { :features => features }
end
+ def json_return_error(error)
+ error_output=Hash.new
+ error_output[:url] =request.env['REQUEST_URI']
+ error_output[:status] =response.status
+ error_output[:message]=error.message if error
+ error_output.to_json
+ end
+
end
Modified: incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb?rev=1137591&r1=1137590&r2=1137591&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb (original)
+++ incubator/deltacloud/trunk/server/lib/sinatra/rabbit.rb Mon Jun 20 10:42:41 2011
@@ -28,8 +28,7 @@ module Sinatra
class DuplicateCollectionException < Deltacloud::ExceptionHandler::DeltacloudException; end
class UnsupportedCollectionException < Deltacloud::ExceptionHandler::DeltacloudException
def initialize
- @details = "This collection is not supported for this provider."
- @message = @details
+ @message = "This collection is not supported for this provider."
# The server understood the request, but is refusing to fulfill it. Authorization will not help and the request
# SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request
# has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish
Modified: incubator/deltacloud/trunk/server/views/errors/500.xml.haml
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/server/views/errors/500.xml.haml?rev=1137591&r1=1137590&r2=1137591&view=diff
==============================================================================
--- incubator/deltacloud/trunk/server/views/errors/500.xml.haml (original)
+++ incubator/deltacloud/trunk/server/views/errors/500.xml.haml Mon Jun 20 10:42:41 2011
@@ -2,6 +2,4 @@
%kind backend_error
%backend{ :driver => driver_symbol }
%code=response.status
- - if @error.class.method_defined? :details
- %details< #{cdata @error.details.join("\n")}
%message< #{cdata @error.message}