MBSResolver: improve efficiency of querying latest version

Only get 5 results at a time, and if we see that we're already
retrieving an old versions, stop requesting more pages.
This commit is contained in:
Owen W. Taylor
2020-11-18 11:09:34 -05:00
parent 31fca9a962
commit c27e77c59d
2 changed files with 23 additions and 7 deletions

View File

@@ -66,7 +66,7 @@ class MBSResolver(KojiResolver):
"""
query = self._query_from_nsvc(name, stream, version, context, states)
query["page"] = 1
query["per_page"] = 10
query["per_page"] = 5
query.update(kwargs)
modules = []
@@ -81,6 +81,11 @@ class MBSResolver(KojiResolver):
if not data["meta"]["next"]:
break
if version is None and "stream_version_lte" not in kwargs:
# Stop querying when we've gotten a different version
if modules_per_page[-1]["version"] != modules[0]["version"]:
break
query["page"] += 1
# Error handling

View File

@@ -56,11 +56,12 @@ class FakeMBS(object):
def __init__(self, session_mock):
session_mock.get = self.get
self.items = test_items
self.request_count = 0
self.required_params = {
'order_desc_by': 'version',
'state': ['ready'],
'verbose': True,
'per_page': 10,
'per_page': 5,
}
def item_matches(self, item, params):
@@ -86,6 +87,8 @@ class FakeMBS(object):
self.items.append(item)
def get(self, url, params={}):
self.request_count += 1
for k, v in self.required_params.items():
if v == ABSENT:
assert k not in params
@@ -153,15 +156,18 @@ class TestMBSModule:
):
""" Test for querying MBS without the version of a module """
version = formatted_testmodule_mmd.get_version()
fake_mbs.items = []
for i in range(0, 6):
for context in ("00000000", "00000001"):
# First page has version1.context[0..4]
# Second page has version1.context5, version2.context[0..3]
# Third page has version2.context[4..5]
# We should only query the first two pages
for i in range(0, 2):
for context in range(0, 6):
context_string = "{0:08d}".format(context)
m = formatted_testmodule_mmd.copy()
m.set_version(20180205135154 - i)
m.set_context(context)
m.set_context(context_string)
add_item(fake_mbs.items, mmd=m)
ret = resolver.get_module_modulemds("testmodule", "master")
@@ -169,8 +175,13 @@ class TestMBSModule:
expected = {
"testmodule:master:20180205135154:00000000",
"testmodule:master:20180205135154:00000001",
"testmodule:master:20180205135154:00000002",
"testmodule:master:20180205135154:00000003",
"testmodule:master:20180205135154:00000004",
"testmodule:master:20180205135154:00000005",
}
assert nsvcs == expected
assert fake_mbs.request_count == 2
@pytest.mark.parametrize('strict', (False, True))
def test_get_module_modulemds_not_found(self, resolver, fake_mbs, strict):