diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 4ac066f0559d..2712e8186f0f 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -1850,6 +1850,10 @@ def instance_get_all_by_filters(context, filters, sort_key, sort_dir, include or exclude instances whose vm_state is SOFT_DELETED. """ + # NOTE(mriedem): If the limit is 0 there is no point in even going + # to the database since nothing is going to be returned anyway. + if limit == 0: + return [] sort_fn = {'desc': desc, 'asc': asc} diff --git a/nova/tests/db/test_db_api.py b/nova/tests/db/test_db_api.py index 7c5a617b8e04..fcd91d610a07 100644 --- a/nova/tests/db/test_db_api.py +++ b/nova/tests/db/test_db_api.py @@ -1542,6 +1542,11 @@ class InstanceTestCase(test.TestCase, ModelsObjectComparatorMixin): filtered_instances = db.instance_get_all_by_filters(self.ctxt, {}) self._assertEqualListsOfInstances(instances, filtered_instances) + def test_instance_get_all_by_filters_zero_limit(self): + self.create_instance_with_args() + instances = db.instance_get_all_by_filters(self.ctxt, {}, limit=0) + self.assertEqual([], instances) + def test_instance_metadata_get_multi(self): uuids = [self.create_instance_with_args()['uuid'] for i in range(3)] meta = sqlalchemy_api._instance_metadata_get_multi(self.ctxt, uuids)