summaryrefslogtreecommitdiffstats
path: root/nova/db
diff options
context:
space:
mode:
authorTodd Willey <todd@ansolabs.com>2011-01-25 17:51:49 -0800
committerTodd Willey <todd@ansolabs.com>2011-01-25 17:51:49 -0800
commitbe28eceff7b0a7a1dc33c3ade3ab221c6b1c8acd (patch)
treed0d71f4baae6f8da19e8e5389144d45123df5a66 /nova/db
parentbbea3a093f3e9be5052a2e64b6d5d0b909ae33ee (diff)
parent5e4259ce6deb227b778acf23770e35f786c9c3d0 (diff)
Merge trunk.
Diffstat (limited to 'nova/db')
-rw-r--r--nova/db/api.py6
-rw-r--r--nova/db/sqlalchemy/api.py13
-rw-r--r--nova/db/sqlalchemy/session.py3
3 files changed, 21 insertions, 1 deletions
diff --git a/nova/db/api.py b/nova/db/api.py
index b8c2f15b5..69552ee73 100644
--- a/nova/db/api.py
+++ b/nova/db/api.py
@@ -71,7 +71,6 @@ class NoMoreTargets(exception.Error):
"""No more available blades"""
pass
-
###################
@@ -351,6 +350,11 @@ def instance_get_all_by_project(context, project_id):
return IMPL.instance_get_all_by_project(context, project_id)
+def instance_get_all_by_host(context, host):
+ """Get all instance belonging to a host."""
+ return IMPL.instance_get_all_by_host(context, host)
+
+
def instance_get_all_by_reservation(context, reservation_id):
"""Get all instance belonging to a reservation."""
return IMPL.instance_get_all_by_reservation(context, reservation_id)
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index d428fc9d6..38fcf9461 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -724,6 +724,17 @@ def instance_get_all_by_user(context, user_id):
all()
+@require_admin_context
+def instance_get_all_by_host(context, host):
+ session = get_session()
+ return session.query(models.Instance).\
+ options(joinedload_all('fixed_ip.floating_ips')).\
+ options(joinedload('security_groups')).\
+ filter_by(host=host).\
+ filter_by(deleted=can_read_deleted(context)).\
+ all()
+
+
@require_context
def instance_get_all_by_project(context, project_id):
authorize_project_context(context, project_id)
@@ -1396,11 +1407,13 @@ def volume_get(context, volume_id, session=None):
if is_admin_context(context):
result = session.query(models.Volume).\
+ options(joinedload('instance')).\
filter_by(id=volume_id).\
filter_by(deleted=can_read_deleted(context)).\
first()
elif is_user_context(context):
result = session.query(models.Volume).\
+ options(joinedload('instance')).\
filter_by(project_id=context.project_id).\
filter_by(id=volume_id).\
filter_by(deleted=False).\
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