summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-09-10 21:20:15 +0000
committerGerrit Code Review <review@openstack.org>2021-09-10 21:20:15 +0000
commit85f6166473ad39f04455fe7eae34a653744203e5 (patch)
treead128dfb5419b1a631ad5733dd1c988fefca7022
parentcbd0262ac1aa34c3edcb6e7dd6565d0f1640772b (diff)
parent78e8b7506a7d68089cf08ba24085bf99e070e4ce (diff)
downloadglance-85f6166473ad39f04455fe7eae34a653744203e5.tar.gz
Merge "Fix image/tasks API for in-progress tasks" into stable/wallaby
-rw-r--r--glance/db/sqlalchemy/api.py3
-rw-r--r--glance/tests/functional/db/base.py10
2 files changed, 7 insertions, 6 deletions
diff --git a/glance/db/sqlalchemy/api.py b/glance/db/sqlalchemy/api.py
index 15698e335..0d373ba6c 100644
--- a/glance/db/sqlalchemy/api.py
+++ b/glance/db/sqlalchemy/api.py
@@ -1672,7 +1672,8 @@ def tasks_get_by_image(context, image_id, session=None):
).filter_by(image_id=image_id)
expires_at = models.Task.expires_at
- query = query.filter(expires_at >= timeutils.utcnow())
+ query = query.filter(sa_sql.or_(expires_at == None,
+ expires_at >= timeutils.utcnow()))
updated_at = models.Task.updated_at
query.filter(
updated_at <= (timeutils.utcnow() +
diff --git a/glance/tests/functional/db/base.py b/glance/tests/functional/db/base.py
index 1897edc14..da358b17b 100644
--- a/glance/tests/functional/db/base.py
+++ b/glance/tests/functional/db/base.py
@@ -1774,13 +1774,13 @@ class TaskTests(test_utils.BaseTestCase):
self.assertTrue(tasks[0]['deleted'])
def test_task_get_by_image_no_expiry(self):
- # Make sure we do not retrieve the expired task
+ # Make sure we find the task that has expires_at=NULL
task_id, tasks = self._test_task_get_by_image(expired=None)
- self.assertEqual(0, len(tasks))
+ self.assertEqual(1, len(tasks))
- # The task should not have been retrieved at all above,
- # but it's also not deleted because it doesn't have an expiry,
- # so it should still be in the DB.
+ # The task should have been retrieved above, and it's also not
+ # deleted because it doesn't have an expiry, so it should
+ # still be in the DB.
tasks = self.db_api.task_get_all(self.adm_context)
self.assertEqual(1, len(tasks))
self.assertEqual(task_id, tasks[0]['id'])