summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBoris Pavlovic <boris@pavlovic.me>2013-03-20 01:33:00 +0400
committerBoris Pavlovic <boris@pavlovic.me>2013-03-20 02:02:01 +0400
commit2b7caba1053f53251074ed1500bf5a8b55c9a78d (patch)
tree9a99883a7010cf9e55629ab8a3d8a6f8b40b6802
parentac0c8d41c683a3bd00aa2d33a03b20a5c7a6f83c (diff)
downloadnova-2b7caba1053f53251074ed1500bf5a8b55c9a78d.tar.gz
Refactor db.service_destroy and db.service_update methods
Remove session parameter from db.service_get method Optimize db.service_destroy: Was: 1 request with join to get service with compute_node 1 request to delete service 1(0) to delete compute_node Now: 1 request (without join) to delete service 1 request to delete compute_node Optimize db.service_update: Remove unused join. Fixes bug 1157442 blueprint db-session-cleanup Change-Id: Ifcc8fdebfc95daec736464cbc9e16301116540aa
-rw-r--r--nova/db/sqlalchemy/api.py36
1 files changed, 24 insertions, 12 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index d9fbb34b58..1458c574fa 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -324,21 +324,27 @@ class InequalityCondition(object):
def service_destroy(context, service_id):
session = get_session()
with session.begin():
- service_ref = service_get(context, service_id, session=session)
- service_ref.soft_delete(session=session)
+ count = model_query(context, models.Service, session=session).\
+ filter_by(id=service_id).\
+ soft_delete(synchronize_session=False)
- if (service_ref.topic == CONF.compute_topic and
- service_ref.compute_node):
- for c in service_ref.compute_node:
- c.soft_delete(session=session)
+ if count == 0:
+ raise exception.ServiceNotFound(service_id=service_id)
+
+ model_query(context, models.ComputeNode, session=session).\
+ filter_by(service_id=service_id).\
+ soft_delete(synchronize_session=False)
@require_admin_context
-def service_get(context, service_id, session=None):
- result = model_query(context, models.Service, session=session).\
- options(joinedload('compute_node')).\
- filter_by(id=service_id).\
- first()
+def _service_get(context, service_id, with_compute_node=True, session=None):
+ query = model_query(context, models.Service, session=session).\
+ filter_by(id=service_id)
+
+ if with_compute_node:
+ query = query.options(joinedload('compute_node'))
+
+ result = query.first()
if not result:
raise exception.ServiceNotFound(service_id=service_id)
@@ -346,6 +352,11 @@ def service_get(context, service_id, session=None):
@require_admin_context
+def service_get(context, service_id):
+ return _service_get(context, service_id)
+
+
+@require_admin_context
def service_get_all(context, disabled=None):
query = model_query(context, models.Service)
@@ -420,7 +431,8 @@ def service_create(context, values):
def service_update(context, service_id, values):
session = get_session()
with session.begin():
- service_ref = service_get(context, service_id, session=session)
+ service_ref = _service_get(context, service_id,
+ with_compute_node=False, session=session)
service_ref.update(values)
service_ref.save(session=session)
return service_ref