diff options
author | Boris Pavlovic <boris@pavlovic.me> | 2013-03-20 01:33:00 +0400 |
---|---|---|
committer | Boris Pavlovic <boris@pavlovic.me> | 2013-03-20 02:02:01 +0400 |
commit | 2b7caba1053f53251074ed1500bf5a8b55c9a78d (patch) | |
tree | 9a99883a7010cf9e55629ab8a3d8a6f8b40b6802 | |
parent | ac0c8d41c683a3bd00aa2d33a03b20a5c7a6f83c (diff) | |
download | nova-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.py | 36 |
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 |