summaryrefslogtreecommitdiffstats
path: root/nova
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2011-01-25 23:39:35 +0000
committerTarmac <>2011-01-25 23:39:35 +0000
commitdbbaa7c41384c57b2aa10514518b71180316e64a (patch)
treef2b31bb774f3239208d500f73b2bc5eed68ff437 /nova
parentcbf94d5a5cac6190b9dabb589eb5ee9b6d2f5127 (diff)
parent12952feab2fdcf0fe705114404c303cbb0f7c0d1 (diff)
This branch updates docs to reflect the db sync addition. It additionally adds some useful errors to nova-manage to help people that are using old guides. It wraps sqlalchemy errors in generic DBError. Finally, it updates nova.sh to use current settings.
Diffstat (limited to 'nova')
-rw-r--r--nova/db/api.py1
-rw-r--r--nova/db/sqlalchemy/session.py3
-rw-r--r--nova/exception.py18
3 files changed, 21 insertions, 1 deletions
diff --git a/nova/db/api.py b/nova/db/api.py
index da1e3d1f2..c6c03fb0e 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -71,7 +71,6 @@ class NoMoreTargets(exception.Error):
"""No more available blades"""
pass
-
###################
diff --git a/nova/db/sqlalchemy/session.py b/nova/db/sqlalchemy/session.py
index c3876c02a..dc885f138 100644
--- a/nova/db/sqlalchemy/session.py
+++ b/nova/db/sqlalchemy/session.py
@@ -22,6 +22,7 @@ Session Handling for SQLAlchemy backend
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
+from nova import exception
from nova import flags
FLAGS = flags.FLAGS
@@ -43,4 +44,6 @@ def get_session(autocommit=True, expire_on_commit=False):
autocommit=autocommit,
expire_on_commit=expire_on_commit))
session = _MAKER()
+ session.query = exception.wrap_db_error(session.query)
+ session.flush = exception.wrap_db_error(session.flush)
return session
diff --git a/nova/exception.py b/nova/exception.py
index 2320e2214..f604fd63a 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -81,6 +81,24 @@ class TimeoutException(Error):
pass
+class DBError(Error):
+ """Wraps an implementation specific exception"""
+ def __init__(self, inner_exception):
+ self.inner_exception = inner_exception
+ super(DBError, self).__init__(str(inner_exception))
+
+
+def wrap_db_error(f):
+ def _wrap(*args, **kwargs):
+ try:
+ return f(*args, **kwargs)
+ except Exception, e:
+ LOG.exception(_('DB exception wrapped'))
+ raise DBError(e)
+ return _wrap
+ _wrap.func_name = f.func_name
+
+
def wrap_exception(f):
def _wrap(*args, **kw):
try: