diff options
| author | Mike Lundy <mike@pistoncloud.com> | 2012-03-02 00:15:04 +0000 |
|---|---|---|
| committer | Mike Lundy <mike@pistoncloud.com> | 2012-03-02 02:24:33 +0000 |
| commit | 27013e87f53cccbfd2e203f065e416437ba08987 (patch) | |
| tree | d6609f0fd9b6f5333206676debdef1321acadac6 /nova/api | |
| parent | 20346926533a6ef6f4cd1ddf4e4123ecefbabc72 (diff) | |
| download | nova-27013e87f53cccbfd2e203f065e416437ba08987.tar.gz nova-27013e87f53cccbfd2e203f065e416437ba08987.tar.xz nova-27013e87f53cccbfd2e203f065e416437ba08987.zip | |
Fail gracefully when the db doesn't speak unicode
When sqlalchemy/mysql doesn't contain the charset=utf8 or use_unicode=1
parameters (and the default mysql connection charset is not utf8),
sqlalchemy will connect to mysql in ascii mode; In ascii mode, it will
attempt to reencode all input data to latin-1 regardless of the
database/table collation setting. This catches that error and turns it
into an invalid parameter.
(The error message associated with this is something like
UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2026' in
position 30: ordinal not in range(256))
This fixes bug 944034 and is related to bug 898808
Change-Id: I082b7568ef9e9d2104e13aa58d207535ef201bd3
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/wsgi.py | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py index 9be0501fd..02bf0900c 100644 --- a/nova/api/openstack/wsgi.py +++ b/nova/api/openstack/wsgi.py @@ -574,6 +574,9 @@ class ResourceExceptionHandler(object): if isinstance(ex_value, exception.NotAuthorized): msg = unicode(ex_value) raise Fault(webob.exc.HTTPForbidden(explanation=msg)) + elif isinstance(ex_value, exception.Invalid): + raise Fault(exception.ConvertedException( + code=ex_value.code, explanation=unicode(ex_value))) elif isinstance(ex_value, TypeError): exc_info = (ex_type, ex_value, ex_traceback) LOG.error(_('Exception handling resource: %s') % ex_value, |
