From 582069e941ab14d5bca79aa79a84d2e0ebd7b8c7 Mon Sep 17 00:00:00 2001 From: Yuriy Zveryanskyy Date: Thu, 24 Oct 2013 16:38:00 +0300 Subject: [PATCH] Fix exceptions handling in controllers 1. DB api create_* methods not raises IronicException. 2. Non-Ironic exception from DB api create_* method should cause server error. Also unnecessary wsme.validate decorator removed from chassis controller. Change-Id: I71279f7db5c93804aeac077c034e09cb907b1fb9 --- ironic/api/controllers/v1/chassis.py | 8 ++++---- ironic/api/controllers/v1/node.py | 4 ++-- ironic/api/controllers/v1/port.py | 7 ++++--- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/ironic/api/controllers/v1/chassis.py b/ironic/api/controllers/v1/chassis.py index cce21983829..b9671d056e7 100644 --- a/ironic/api/controllers/v1/chassis.py +++ b/ironic/api/controllers/v1/chassis.py @@ -33,6 +33,7 @@ from ironic.api.controllers.v1 import node from ironic.api.controllers.v1 import utils from ironic.common import exception from ironic import objects +from ironic.openstack.common import excutils from ironic.openstack.common import log LOG = log.getLogger(__name__) @@ -165,15 +166,14 @@ class ChassisController(rest.RestController): rpc_chassis = objects.Chassis.get_by_uuid(pecan.request.context, uuid) return Chassis.convert_with_links(rpc_chassis) - @wsme.validate(Chassis) @wsme_pecan.wsexpose(Chassis, body=Chassis) def post(self, chassis): """Create a new chassis.""" try: new_chassis = pecan.request.dbapi.create_chassis(chassis.as_dict()) - except exception.IronicException as e: - LOG.exception(e) - raise wsme.exc.ClientSideError(_("Invalid data")) + except Exception as e: + with excutils.save_and_reraise_exception(): + LOG.exception(e) return Chassis.convert_with_links(new_chassis) @wsme_pecan.wsexpose(Chassis, unicode, body=[unicode]) diff --git a/ironic/api/controllers/v1/node.py b/ironic/api/controllers/v1/node.py index e911e6df7a7..e36dcdab5ce 100644 --- a/ironic/api/controllers/v1/node.py +++ b/ironic/api/controllers/v1/node.py @@ -396,8 +396,8 @@ class NodesController(rest.RestController): try: new_node = pecan.request.dbapi.create_node(node_dict) except Exception as e: - LOG.exception(e) - raise wsme.exc.ClientSideError(_("Invalid data")) + with excutils.save_and_reraise_exception(): + LOG.exception(e) return Node.convert_with_links(new_node) @wsme_pecan.wsexpose(Node, unicode, body=[unicode]) diff --git a/ironic/api/controllers/v1/port.py b/ironic/api/controllers/v1/port.py index 504a00390d0..878af27f785 100644 --- a/ironic/api/controllers/v1/port.py +++ b/ironic/api/controllers/v1/port.py @@ -32,6 +32,7 @@ from ironic.api.controllers.v1 import utils as api_utils from ironic.common import exception from ironic.common import utils from ironic import objects +from ironic.openstack.common import excutils from ironic.openstack.common import log LOG = log.getLogger(__name__) @@ -214,9 +215,9 @@ class PortsController(rest.RestController): try: new_port = pecan.request.dbapi.create_port(port_dict) - except exception.IronicException as e: - LOG.exception(e) - raise wsme.exc.ClientSideError(_("Invalid data")) + except Exception as e: + with excutils.save_and_reraise_exception(): + LOG.exception(e) return Port.convert_with_links(new_port) @wsme_pecan.wsexpose(Port, unicode, body=[unicode])