[Kimchi-devel] [PATCH 1/4] Handle requests differently for transient objects

Aline Manera alinefm at linux.vnet.ibm.com
Wed Jan 21 14:09:41 UTC 2015


On 19/01/2015 19:49, Christy Perez wrote:
> If a transient (or non-persistent) object (e.g. VM, network or
> storage pool) is created outside of Kimchi, it will (expectedly)
> be deleted when shutdown. Since Kimchi calls a GET after
> shutdown and other POST requests, the GET fails, and a user will
> recieve an error. However, this is not an error condition.
>
> This patch avoids reporting the exception on the GET if the object
> should to ignore it.
> ---
>   src/kimchi/control/base.py | 13 +++++++++----
>   1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/src/kimchi/control/base.py b/src/kimchi/control/base.py
> index 97e789f..8048370 100644
> --- a/src/kimchi/control/base.py
> +++ b/src/kimchi/control/base.py
> @@ -63,7 +63,8 @@ def _redirect(self, ident, code=303):
>               uri_params += [urllib2.quote(ident.encode('utf-8'), safe="")]
>               raise cherrypy.HTTPRedirect(self.uri_fmt % tuple(uri_params), code)
>
> -    def generate_action_handler(self, action_name, action_args=None):
> +    def generate_action_handler(self, action_name, action_args=None,
> +                                ignore_not_found=False):
>           def _render_element(self, ident):
>               self._redirect(ident)
>               uri_params = []
> @@ -75,7 +76,7 @@ def _render_element(self, ident):
>               raise internal_redirect(self.uri_fmt % tuple(uri_params))
>
>           return self._generate_action_handler_base(action_name, _render_element,
> -                                                  action_args)
> +                                                  ignore_not_found, action_args)
>
>       def generate_action_handler_task(self, action_name, action_args=None):
>           def _render_task(self, task):
> @@ -86,7 +87,7 @@ def _render_task(self, task):
>                                                     action_args)
>
>       def _generate_action_handler_base(self, action_name, render_fn,
> -                                      action_args=None):
> +                                      ignore_not_found, action_args=None):
>           def wrapper(*args, **kwargs):
>               validate_method(('POST'), self.role_key, self.admin_methods)
>               try:
> @@ -111,7 +112,11 @@ def wrapper(*args, **kwargs):
>               except UnauthorizedError, e:
>                   raise cherrypy.HTTPError(403, e.message)
>               except NotFoundError, e:

> -                raise cherrypy.HTTPError(404, e.message)
> +                if ignore_not_found is True:
> +                    # Should something be returned instead?

I don't think so.

You can change the if statement to only raise the exception when 
ignore_not_found is False.

if not ignore_not_found:
     raise NotFoundError()

> +                    pass
> +                else:
> +                    raise cherrypy.HTTPError(404, e.message)

>               except OperationFailed, e:
>                   raise cherrypy.HTTPError(500, e.message)
>               except KimchiException, e:




More information about the Kimchi-devel mailing list