Start querying modules by context when it's available

When implementing module stream expansion, we'll need to make sure
the buildrequires are queried using their context as well.
This commit is contained in:
mprahl
2018-03-01 20:31:00 -05:00
parent f19f76872c
commit 28e821fee0
6 changed files with 33 additions and 17 deletions

View File

@@ -132,6 +132,8 @@ class PDCResolver(GenericResolver):
elif is_module_dict(data):
result = {'variant_id': data['name'], 'variant_version': data['version']}
if data.get('context'):
result['variant_context'] = data['context']
if 'release' in data:
result['variant_release'] = data['release']
@@ -190,6 +192,8 @@ class PDCResolver(GenericResolver):
query['variant_release'] = variant_dict['variant_release']
if module_info.get('active'):
query['active'] = module_info['active']
if module_info.get('context'):
query['variant_context'] = module_info['context']
# TODO: So far sorting on Fedora prod PDC instance is broken and it sorts
# only by variant_uid by default. Once the sorting is fixed, we can start
@@ -220,11 +224,12 @@ class PDCResolver(GenericResolver):
assert len(results) <= 1, pprint.pformat(retval)
return results[0]
def get_module_tag(self, name, stream, version, strict=False):
def get_module_tag(self, name, stream, version, context, strict=False):
"""
:param name: a module's name
:param stream: a module's stream
:param version: a module's version
:param context: a module's context
:param strict: Normally this function returns None if no module can be
found. If strict=True, then an UnprocessableEntity is raised.
:return: koji tag string
@@ -232,7 +237,8 @@ class PDCResolver(GenericResolver):
module_info = {
'name': name,
'version': stream,
'release': str(version)
'release': str(version),
'context': context
}
return self._get_module(module_info, strict=strict)['koji_tag']
@@ -388,12 +394,13 @@ class PDCResolver(GenericResolver):
# Return the union of all rpms in all profiles of the given keys.
return results
def get_module_build_dependencies(self, name=None, stream=None, version=None, mmd=None,
strict=False):
def get_module_build_dependencies(self, name=None, stream=None, version=None, context=None,
mmd=None, strict=False):
"""
:param name: a module's name (required if mmd is not set)
:param stream: a module's stream (required if mmd is not set)
:param version: a module's version (required if mmd is not set)
:param context: a module's context (required if mmd is not set)
:param mmd: uses the mmd instead of the name, stream, version to query PDC
:param strict: Normally this function returns None if no module can be
found. If strict=True, then an UnprocessableEntity is raised.
@@ -401,12 +408,12 @@ class PDCResolver(GenericResolver):
"""
if mmd:
log.debug("get_module_build_dependencies(mmd=%r strict=%r)" % (mmd, strict))
elif any(x is None for x in [name, stream, version]):
raise RuntimeError('The name, stream, and version weren\'t specified')
elif any(x is None for x in [name, stream, version, context]):
raise RuntimeError('The name, stream, version, and/or context weren\'t specified')
else:
version = str(version)
log.debug("get_module_build_dependencies(%s, strict=%r)"
% (', '.join([name, stream, str(version)]), strict))
% (', '.join([name, stream, str(version), context]), strict))
# This is the set we're going to build up and return.
module_tags = {}
@@ -417,7 +424,8 @@ class PDCResolver(GenericResolver):
module_info = {
'name': name,
'version': stream,
'release': str(version)
'release': str(version),
'context': context
}
queried_module = self._get_module(module_info, strict=strict)
yaml = queried_module['modulemd']

View File

@@ -98,7 +98,7 @@ class GenericResolver(six.with_metaclass(ABCMeta)):
return mmd
@abstractmethod
def get_module_tag(self, name, stream, version, strict=False):
def get_module_tag(self, name, stream, version, context, strict=False):
raise NotImplementedError()
@abstractmethod
@@ -107,7 +107,7 @@ class GenericResolver(six.with_metaclass(ABCMeta)):
@abstractmethod
def get_module_build_dependencies(self, name=None, stream=None, version=None, mmd=None,
strict=False):
context=None, strict=False):
raise NotImplementedError()
@abstractmethod

View File

@@ -229,9 +229,10 @@ def wait(config, session, msg):
else:
# For Koji backend, query for the module we are going to
# build to get the koji_tag and deps from it.
log.info("Getting deps for %s" % (':'.join([build.name, build.stream, build.version])))
nsvc = ':'.join([build.name, build.stream, build.version])
log.info("Getting deps for %s" % (nsvc))
deps_dict = resolver.get_module_build_dependencies(
build.name, build.stream, build.version, strict=True)
build.name, build.stream, build.version, build.context, strict=True)
dependencies = set(deps_dict.keys())
# Find out the name of Koji tag to which the module's Content
@@ -244,9 +245,9 @@ def wait(config, session, msg):
module_names_streams[base_module_name])
break
log.info('Getting tag for {0}'.format(':'.join([
build.name, build.stream, build.version])))
tag = resolver.get_module_tag(build.name, build.stream, build.version, strict=True)
log.info('Getting tag for {0}'.format(nsvc))
tag = resolver.get_module_tag(
build.name, build.stream, build.version, build.context, strict=True)
return dependencies, tag, cg_build_koji_tag

View File

@@ -140,6 +140,7 @@ def pdc_module_inactive(pdc):
'variant_type': 'module',
'variant_version': 'master',
'variant_release': '20180205135154',
'variant_context': 'c2c572ec',
'koji_tag': 'module-95b214a704c984be',
'modulemd': TESTMODULE_MODULEMD,
'runtime_deps': [
@@ -194,6 +195,7 @@ def pdc_module_reuse(pdc_module_active):
pdc_module_reuse.endpoints['unreleasedvariants']['GET'][-1].update({
'variant_uid': 'testmodule:master:{0}'.format(mmd.get_version()),
'variant_release': str(mmd.get_version()),
'variant_context': '7c29193d',
'modulemd': mmd.dumps(),
'koji_tag': 'module-de3adf79caf3e1b8'
})

View File

@@ -411,6 +411,7 @@ class TestBuild:
'variant_type': 'module',
'variant_version': 'master',
'variant_release': '20180205135154',
'variant_context': 'c2c572ec',
'koji_tag': 'module-95b214a704c984be',
'modulemd': python3_yaml,
'runtime_deps': [
@@ -916,6 +917,8 @@ class TestBuild:
"""
now = datetime.utcnow()
submitted_time = now - timedelta(minutes=3)
pdc_module_inactive.endpoints['unreleasedvariants']['GET'][-1]['variant_context'] = \
'7c29193d'
# Create a module in the failed state
build_one = models.ModuleBuild()
build_one.name = 'testmodule'
@@ -1040,6 +1043,8 @@ class TestBuild:
FakeModuleBuilder.INSTANT_COMPLETE = True
now = datetime.utcnow()
submitted_time = now - timedelta(minutes=3)
pdc_module_inactive.endpoints['unreleasedvariants']['GET'][-1]['variant_context'] = \
'7c29193d'
# Create a module in the failed state
build_one = models.ModuleBuild()
build_one.name = 'testmodule'

View File

@@ -90,7 +90,7 @@ class TestPDCModule:
})
resolver = mbs_resolver.GenericResolver.create(tests.conf, backend='pdc')
result = resolver.get_module_build_dependencies(
'testmodule', 'master', '20180205135154').keys()
'testmodule', 'master', '20180205135154', 'c2c572ec').keys()
assert set(result) == expected
def test_get_module_build_dependencies_recursive(self, pdc_module_active):
@@ -126,7 +126,7 @@ class TestPDCModule:
resolver = mbs_resolver.GenericResolver.create(tests.conf, backend='pdc')
result = resolver.get_module_build_dependencies(
'testmodule2', 'master', '20180123171545').keys()
'testmodule2', 'master', '20180123171545', 'c2c572ec').keys()
assert set(result) == set(['module-f28-build'])
@patch("module_build_service.config.Config.system",