Refactor work with TaskLog in sqlalchemy.api

Add _task_log_get_query() private method
It is used to remove from task_log_get() and task_log_get_all() session.
parametr and save performance.

task_log_get() method
Remove session parameter from public method.

task_log_get_all() method
Remove session parameter from public method.

task_log_begin_task()
Remove session parameter from public method.
Remove unused return value.

task_log_end_task()
Remove session parameter from public method.
Use 1 db request instead of 2.
Remove unused return value.

blueprint db-session-cleanup

Change-Id: I2c8252de7978e8fddd800e903f18a73ee9a95034
This commit is contained in:
Boris Pavlovic
2013-01-06 14:39:13 +04:00
parent a2f260fff8
commit 1126d0cd61

View File

@@ -4554,21 +4554,7 @@ def _ec2_instance_get_query(context, session=None):
@require_admin_context @require_admin_context
def task_log_get(context, task_name, period_beginning, def _task_log_get_query(context, task_name, period_beginning,
period_ending, host, state=None, session=None):
query = model_query(context, models.TaskLog, session=session).\
filter_by(task_name=task_name).\
filter_by(period_beginning=period_beginning).\
filter_by(period_ending=period_ending).\
filter_by(host=host)
if state is not None:
query = query.filter_by(state=state)
return query.first()
@require_admin_context
def task_log_get_all(context, task_name, period_beginning,
period_ending, host=None, state=None, session=None): period_ending, host=None, state=None, session=None):
query = model_query(context, models.TaskLog, session=session).\ query = model_query(context, models.TaskLog, session=session).\
filter_by(task_name=task_name).\ filter_by(task_name=task_name).\
@@ -4578,25 +4564,34 @@ def task_log_get_all(context, task_name, period_beginning,
query = query.filter_by(host=host) query = query.filter_by(host=host)
if state is not None: if state is not None:
query = query.filter_by(state=state) query = query.filter_by(state=state)
return query.all() return query
@require_admin_context @require_admin_context
def task_log_begin_task(context, task_name, def task_log_get(context, task_name, period_beginning, period_ending, host,
period_beginning, state=None):
period_ending, return _task_log_get_query(task_name, period_beginning, period_ending,
host, host, state).first()
task_items=None,
message=None,
session=None): @require_admin_context
session = session or get_session() def task_log_get_all(context, task_name, period_beginning, period_ending,
host=None, state=None):
return _task_log_get_query(task_name, period_beginning, period_ending,
host, state).all()
@require_admin_context
def task_log_begin_task(context, task_name, period_beginning, period_ending,
host, task_items=None, message=None):
# NOTE(boris-42): This method has a race condition and will be rewritten
# after bp/db-unique-keys implementation.
session = get_session()
with session.begin(): with session.begin():
task = task_log_get(context, task_name, task_ref = _task_log_get_query(context, task_name, period_beginning,
period_beginning, period_ending, host, session=session).\
period_ending, first()
host, if task_ref:
session=session)
if task:
#It's already run(ning)! #It's already run(ning)!
raise exception.TaskAlreadyRunning(task_name=task_name, host=host) raise exception.TaskAlreadyRunning(task_name=task_name, host=host)
task = models.TaskLog() task = models.TaskLog()
@@ -4610,30 +4605,20 @@ def task_log_begin_task(context, task_name,
if task_items: if task_items:
task.task_items = task_items task.task_items = task_items
task.save(session=session) task.save(session=session)
return task
@require_admin_context @require_admin_context
def task_log_end_task(context, task_name, def task_log_end_task(context, task_name, period_beginning, period_ending,
period_beginning, host, errors, message=None):
period_ending, values = dict(state="DONE", errors=errors)
host, if message:
errors, values["message"] = message
message=None,
session=None): session = get_session()
session = session or get_session()
with session.begin(): with session.begin():
task = task_log_get(context, task_name, rows = _task_log_get_query(context, task_name, period_beginning,
period_beginning, period_ending, host, session=session).\
period_ending, update(values)
host, if rows == 0:
session=session)
if not task:
#It's not running! #It's not running!
raise exception.TaskNotRunning(task_name=task_name, host=host) raise exception.TaskNotRunning(task_name=task_name, host=host)
task.state = "DONE"
if message:
task.message = message
task.errors = errors
task.save(session=session)
return task