mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-02-02 20:59:06 +08:00
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:
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user