Scott Seago
2009-May-07 14:11 UTC
[Ovirt-devel] [PATCH server] fixed bug in 'move items' that prevented moving hosts or storage. Also added separate handler for PartialSuccessException to facilitate better notification of partial successes.
Signed-off-by: Scott Seago <sseago at redhat.com>
---
src/app/controllers/application.rb | 10 ++++++++++
src/app/controllers/hardware_controller.rb | 2 +-
src/app/models/host.rb | 3 +++
src/app/models/storage_pool.rb | 4 ++++
src/app/services/application_service.rb | 1 +
src/app/services/hardware_pool_service.rb | 5 +++--
6 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/src/app/controllers/application.rb
b/src/app/controllers/application.rb
index 6932a1f..4834915 100644
--- a/src/app/controllers/application.rb
+++ b/src/app/controllers/application.rb
@@ -50,6 +50,7 @@ class ApplicationController < ActionController::Base
# to most specific
rescue_from Exception, :with => :handle_general_error
rescue_from PermissionError, :with => :handle_perm_error
+ rescue_from PartialSuccessError, :with => :handle_partial_success_error
def choose_layout
if(params[:component_layout])
@@ -124,6 +125,15 @@ class ApplicationController < ActionController::Base
:title => "Access denied")
end
+ def handle_partial_success_error(error)
+ failures_arr = error.failures.collect do |resource, reason|
+ resource.display_name + ": " + reason
+ end
+ handle_error(:error => error, :status => :ok,
+ :message => error.message + ": " +
failures_arr.join(", "),
+ :title => "Some actions failed")
+ end
+
def handle_general_error(error)
handle_error(:error => error, :status => :internal_server_error,
:title => "Internal Server Error")
diff --git a/src/app/controllers/hardware_controller.rb
b/src/app/controllers/hardware_controller.rb
index 0b6cf9b..7ef08db 100644
--- a/src/app/controllers/hardware_controller.rb
+++ b/src/app/controllers/hardware_controller.rb
@@ -214,7 +214,7 @@ class HardwareController < PoolController
edit_items(params[:target_pool_id], :svc_move_storage, :move)
end
- def edit_items(svc_method, target_pool_id, item_action)
+ def edit_items(target_pool_id, svc_method, item_action)
alert = send(svc_method, params[:id],
params[:resource_ids].split(","),
target_pool_id)
render :json => { :success => true, :alert => alert,
diff --git a/src/app/models/host.rb b/src/app/models/host.rb
index 0665c3f..588137b 100644
--- a/src/app/models/host.rb
+++ b/src/app/models/host.rb
@@ -142,4 +142,7 @@ class Host < ActiveRecord::Base
return vms.size == 0
end
+ def not_movable_reason
+ return "Host has VMs"
+ end
end
diff --git a/src/app/models/storage_pool.rb b/src/app/models/storage_pool.rb
index 92548bd..40333d0 100644
--- a/src/app/models/storage_pool.rb
+++ b/src/app/models/storage_pool.rb
@@ -165,4 +165,8 @@ class StoragePool < ActiveRecord::Base
}
return true
end
+
+ def not_movable_reason
+ return "Storage in use"
+ end
end
diff --git a/src/app/services/application_service.rb
b/src/app/services/application_service.rb
index 7652996..f8085eb 100644
--- a/src/app/services/application_service.rb
+++ b/src/app/services/application_service.rb
@@ -34,6 +34,7 @@ module ApplicationService
def initialize(msg, failures={}, successes=[])
@failures = failures
@successes = successes
+ super(msg)
end
end
diff --git a/src/app/services/hardware_pool_service.rb
b/src/app/services/hardware_pool_service.rb
index c9aa70b..51519fa 100644
--- a/src/app/services/hardware_pool_service.rb
+++ b/src/app/services/hardware_pool_service.rb
@@ -69,7 +69,7 @@ module HardwarePoolService
resources.each do |resource|
begin
if !resource.movable?
- failed_resources[resource] = "Not Movable"
+ failed_resources[resource] = resource.not_movable_reason
elsif ! resource.hardware_pool.can_modify(@user)
failed_resources[resource] = "Failed permission check"
else
@@ -82,7 +82,8 @@ module HardwarePoolService
end
end
unless failed_resources.empty?
- raise PartialSuccessError.new("Move
#{item_class.table_name.humanize} only partially successful",
+ raise PartialSuccessError.new("Move failed for some " +
+
"#{item_class.table_name.humanize}",
failed_resources, successful_resources)
end
return "Move #{item_class.table_name.humanize} successful."
--
1.6.0.6
Scott Seago
2009-May-07 14:46 UTC
[Ovirt-devel] Re: [PATCH server] fixed bug in 'move items' that prevented moving hosts or storage. Also added separate handler for PartialSuccessException to facilitate better notification of partial successes.
Scott Seago wrote:> Signed-off-by: Scott Seago <sseago at redhat.com> > --- > src/app/controllers/application.rb | 10 ++++++++++ > src/app/controllers/hardware_controller.rb | 2 +- > src/app/models/host.rb | 3 +++ > src/app/models/storage_pool.rb | 4 ++++ > src/app/services/application_service.rb | 1 + > src/app/services/hardware_pool_service.rb | 5 +++-- > 6 files changed, 22 insertions(+), 3 deletions(-) >OK I pushed this. Scott