|
|
@@ -32,16 +32,37 @@ def db_version(engine):
|
|
|
return IMPL.db_version(engine)
|
|
|
|
|
|
|
|
|
+def _session(context):
|
|
|
+ return (context and context.session) or get_session()
|
|
|
+
|
|
|
+
|
|
|
+def _model_query(context, *args):
|
|
|
+ session = _session(context)
|
|
|
+ return session.query(*args)
|
|
|
+
|
|
|
+
|
|
|
+def _soft_delete_aware_query(context, *args, **kwargs):
|
|
|
+ """Query helper that accounts for context's `show_deleted` field.
|
|
|
+ :param show_deleted: if True, overrides context's show_deleted field.
|
|
|
+ """
|
|
|
+ query = _model_query(context, *args)
|
|
|
+ show_deleted = kwargs.get('show_deleted') or context.show_deleted
|
|
|
+
|
|
|
+ if not show_deleted:
|
|
|
+ query = query.filter_by(deleted_at=None)
|
|
|
+ return query
|
|
|
+
|
|
|
+
|
|
|
@enginefacade.reader
|
|
|
def get_migrations(context):
|
|
|
- return context.session.query(models.Migration).options(
|
|
|
+ return _soft_delete_aware_query(context, models.Migration).options(
|
|
|
orm.joinedload("tasks")).filter_by(
|
|
|
project_id=context.tenant).all()
|
|
|
|
|
|
|
|
|
@enginefacade.reader
|
|
|
def get_migration(context, migration_id):
|
|
|
- return context.session.query(models.Migration).options(
|
|
|
+ return _soft_delete_aware_query(context, models.Migration).options(
|
|
|
orm.joinedload("tasks").joinedload("progress_updates")).filter_by(
|
|
|
project_id=context.tenant, id=migration_id).first()
|
|
|
|
|
|
@@ -53,16 +74,24 @@ def add_migration(context, migration):
|
|
|
context.session.add(migration)
|
|
|
|
|
|
|
|
|
+@enginefacade.writer
|
|
|
+def delete_migration(context, migration_id):
|
|
|
+ count = _soft_delete_aware_query(context, models.Migration).filter_by(
|
|
|
+ project_id=context.tenant, id=migration_id).soft_delete()
|
|
|
+ if count == 0:
|
|
|
+ raise exception.CoriolisException("0 entries were soft deleted")
|
|
|
+
|
|
|
+
|
|
|
@enginefacade.writer
|
|
|
def set_migration_status(context, migration_id, status):
|
|
|
- migration = context.session.query(models.Migration).filter_by(
|
|
|
+ migration = _soft_delete_aware_query(context, models.Migration).filter_by(
|
|
|
project_id=context.tenant, id=migration_id).first()
|
|
|
migration.status = status
|
|
|
|
|
|
|
|
|
@enginefacade.writer
|
|
|
def set_task_status(context, task_id, status, exception_details=None):
|
|
|
- task = context.session.query(models.Task).filter_by(
|
|
|
+ task = _soft_delete_aware_query(context, models.Task).filter_by(
|
|
|
id=task_id).first()
|
|
|
task.status = status
|
|
|
task.exception_details = exception_details
|
|
|
@@ -70,7 +99,7 @@ def set_task_status(context, task_id, status, exception_details=None):
|
|
|
|
|
|
@enginefacade.writer
|
|
|
def set_task_host(context, task_id, host, process_id):
|
|
|
- task = context.session.query(models.Task).filter_by(
|
|
|
+ task = _soft_delete_aware_query(context, models.Task).filter_by(
|
|
|
id=task_id).first()
|
|
|
task.host = host
|
|
|
task.process_id = process_id
|
|
|
@@ -82,8 +111,8 @@ def get_task(context, task_id, include_migration_tasks=False):
|
|
|
if include_migration_tasks:
|
|
|
join_options = join_options.joinedload("tasks")
|
|
|
|
|
|
- return context.session.query(models.Task).options(join_options).filter_by(
|
|
|
- id=task_id).first()
|
|
|
+ return _soft_delete_aware_query(context, models.Task).options(
|
|
|
+ join_options).filter_by(id=task_id).first()
|
|
|
|
|
|
|
|
|
@enginefacade.writer
|