diff --git a/nova/objects/build_request.py b/nova/objects/build_request.py index 131e382d1ca1..a35b3b9fda77 100644 --- a/nova/objects/build_request.py +++ b/nova/objects/build_request.py @@ -372,14 +372,16 @@ class BuildRequestList(base.ObjectListBase, base.NovaObject): @base.remotable_classmethod def get_by_filters(cls, context, filters, limit=None, marker=None, sort_keys=None, sort_dirs=None): - if limit == 0: - return cls(context, objects=[]) + # Short-circuit on anything that will not yield results. # 'deleted' records can not be returned from here since build_requests # are not soft deleted. - if filters.get('deleted', False): - return cls(context, objects=[]) # 'cleaned' records won't exist as they would need to be deleted. - if filters.get('cleaned', False): + if (limit == 0 or + filters.get('deleted', False) or + filters.get('cleaned', False)): + # If we have a marker honor the MarkerNotFound semantics. + if marker: + raise exception.MarkerNotFound(marker=marker) return cls(context, objects=[]) # Because the build_requests table stores an instance as a serialized diff --git a/nova/tests/functional/regressions/test_bug_1849409.py b/nova/tests/functional/regressions/test_bug_1849409.py index 4b41c7ae934f..db024052e77f 100644 --- a/nova/tests/functional/regressions/test_bug_1849409.py +++ b/nova/tests/functional/regressions/test_bug_1849409.py @@ -59,6 +59,4 @@ class ListDeletedServersWithMarker(test.TestCase, servers = self.api.get_servers(detail=False, search_opts={'deleted': True, 'marker': server['id']}) - # FIXME(mriedem): This is bug 1849409 where the marker param is not - # honored correctly when using deleted=True. - self.assertEqual(1, len(servers), servers) + self.assertEqual(0, len(servers), servers)