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
This commit is contained in:
@@ -324,27 +324,38 @@ class InequalityCondition(object):
|
|||||||
def service_destroy(context, service_id):
|
def service_destroy(context, service_id):
|
||||||
session = get_session()
|
session = get_session()
|
||||||
with session.begin():
|
with session.begin():
|
||||||
service_ref = service_get(context, service_id, session=session)
|
count = model_query(context, models.Service, session=session).\
|
||||||
service_ref.soft_delete(session=session)
|
filter_by(id=service_id).\
|
||||||
|
soft_delete(synchronize_session=False)
|
||||||
|
|
||||||
if (service_ref.topic == CONF.compute_topic and
|
if count == 0:
|
||||||
service_ref.compute_node):
|
raise exception.ServiceNotFound(service_id=service_id)
|
||||||
for c in service_ref.compute_node:
|
|
||||||
c.soft_delete(session=session)
|
model_query(context, models.ComputeNode, session=session).\
|
||||||
|
filter_by(service_id=service_id).\
|
||||||
|
soft_delete(synchronize_session=False)
|
||||||
|
|
||||||
|
|
||||||
@require_admin_context
|
@require_admin_context
|
||||||
def service_get(context, service_id, session=None):
|
def _service_get(context, service_id, with_compute_node=True, session=None):
|
||||||
result = model_query(context, models.Service, session=session).\
|
query = model_query(context, models.Service, session=session).\
|
||||||
options(joinedload('compute_node')).\
|
filter_by(id=service_id)
|
||||||
filter_by(id=service_id).\
|
|
||||||
first()
|
if with_compute_node:
|
||||||
|
query = query.options(joinedload('compute_node'))
|
||||||
|
|
||||||
|
result = query.first()
|
||||||
if not result:
|
if not result:
|
||||||
raise exception.ServiceNotFound(service_id=service_id)
|
raise exception.ServiceNotFound(service_id=service_id)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
@require_admin_context
|
||||||
|
def service_get(context, service_id):
|
||||||
|
return _service_get(context, service_id)
|
||||||
|
|
||||||
|
|
||||||
@require_admin_context
|
@require_admin_context
|
||||||
def service_get_all(context, disabled=None):
|
def service_get_all(context, disabled=None):
|
||||||
query = model_query(context, models.Service)
|
query = model_query(context, models.Service)
|
||||||
@@ -420,7 +431,8 @@ def service_create(context, values):
|
|||||||
def service_update(context, service_id, values):
|
def service_update(context, service_id, values):
|
||||||
session = get_session()
|
session = get_session()
|
||||||
with session.begin():
|
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.update(values)
|
||||||
service_ref.save(session=session)
|
service_ref.save(session=session)
|
||||||
return service_ref
|
return service_ref
|
||||||
|
Reference in New Issue
Block a user