improve race condition for getNextRelease / images
Fixes: https://pagure.io/koji/issue/2138
This commit is contained in:
parent
9e196264da
commit
ba02c1b977
2 changed files with 10 additions and 22 deletions
|
|
@ -2469,10 +2469,6 @@ class BuildImageTask(MultiPlatformTask):
|
|||
dict(name=name, version=version, release=release,
|
||||
epoch=0))
|
||||
|
||||
def getRelease(self, name, ver):
|
||||
"""return the next available release number for an N-V"""
|
||||
return self.session.getNextRelease(dict(name=name, version=ver))
|
||||
|
||||
|
||||
class BuildBaseImageTask(BuildImageTask):
|
||||
Methods = ['image']
|
||||
|
|
@ -2504,15 +2500,14 @@ class BuildBaseImageTask(BuildImageTask):
|
|||
bld_info = None
|
||||
try:
|
||||
release = opts.get('release')
|
||||
if not release:
|
||||
release = self.getRelease(name, version)
|
||||
if '-' in version:
|
||||
raise koji.ApplianceError('The Version may not have a hyphen')
|
||||
if '-' in release:
|
||||
if release and '-' in release:
|
||||
raise koji.ApplianceError('The Release may not have a hyphen')
|
||||
if not opts.get('scratch'):
|
||||
bld_info = self.initImageBuild(name, version, release,
|
||||
target_info, opts)
|
||||
release = bld_info['release']
|
||||
|
||||
subtasks = {}
|
||||
self.logger.debug("Spawning jobs for image arches: %r" % (arches))
|
||||
|
|
@ -2644,11 +2639,10 @@ class BuildApplianceTask(BuildImageTask):
|
|||
bld_info = None
|
||||
try:
|
||||
release = opts.get('release')
|
||||
if not release:
|
||||
release = self.getRelease(name, version)
|
||||
if not opts.get('scratch'):
|
||||
bld_info = self.initImageBuild(name, version, release,
|
||||
target_info, opts)
|
||||
release = bld_info['release']
|
||||
create_task_id = self.session.host.subtask(method='createAppliance',
|
||||
arglist=[name, version, release, arch,
|
||||
target_info, build_tag,
|
||||
|
|
@ -2732,11 +2726,10 @@ class BuildLiveCDTask(BuildImageTask):
|
|||
bld_info = None
|
||||
try:
|
||||
release = opts.get('release')
|
||||
if not release:
|
||||
release = self.getRelease(name, version)
|
||||
if not opts.get('scratch'):
|
||||
bld_info = self.initImageBuild(name, version, release,
|
||||
target_info, opts)
|
||||
release = bld_info['release']
|
||||
create_task_id = self.session.host.subtask(method='createLiveCD',
|
||||
arglist=[name, version, release, arch,
|
||||
target_info, build_tag,
|
||||
|
|
@ -2825,16 +2818,16 @@ class BuildLiveMediaTask(BuildImageTask):
|
|||
bld_info = None
|
||||
try:
|
||||
release = opts.get('release')
|
||||
if not release:
|
||||
release = self.getRelease(name, version)
|
||||
if not opts.get('scratch'):
|
||||
bld_info = self.initImageBuild(name, version, release,
|
||||
target_info, opts)
|
||||
release = bld_info['release']
|
||||
subtasks = {}
|
||||
canfail = []
|
||||
for arch in arches:
|
||||
subtasks[arch] = self.subtask('createLiveMedia',
|
||||
[name, version, release, arch, target_info,
|
||||
[name, version, release,
|
||||
arch, target_info,
|
||||
build_tag, repo_info, ksfile, opts],
|
||||
label='livemedia %s' % arch, arch=arch)
|
||||
if arch in opts.get('optional_arches', []):
|
||||
|
|
@ -4497,11 +4490,6 @@ class BuildIndirectionImageTask(OzImageTask):
|
|||
return self.session.host.initImageBuild(self.id,
|
||||
dict(name=name, version=version, release=release,
|
||||
epoch=0))
|
||||
|
||||
def getRelease(self, name, ver):
|
||||
"""return the next available release number for an N-V"""
|
||||
return self.session.getNextRelease(dict(name=name, version=ver))
|
||||
|
||||
# END inefficient base image task method copies
|
||||
|
||||
def fetchHubOrSCM(self, filepath, fileurl, build_tag):
|
||||
|
|
@ -4680,11 +4668,9 @@ class BuildIndirectionImageTask(OzImageTask):
|
|||
release = opts['release']
|
||||
|
||||
# TODO: Another mostly copy-paste
|
||||
if not release:
|
||||
release = self.getRelease(name, version)
|
||||
if '-' in version:
|
||||
raise koji.ApplianceError('The Version may not have a hyphen')
|
||||
if '-' in release:
|
||||
if release and '-' in release:
|
||||
raise koji.ApplianceError('The Release may not have a hyphen')
|
||||
|
||||
indirection_template = self.fetchHubOrSCM(opts.get('indirection_template'),
|
||||
|
|
|
|||
|
|
@ -13975,6 +13975,8 @@ class HostExports(object):
|
|||
data['owner'] = task.getOwner()
|
||||
data['state'] = koji.BUILD_STATES['BUILDING']
|
||||
data['completion_time'] = None
|
||||
if data.get('release') is None:
|
||||
data['release'] = get_next_release(build_info)
|
||||
build_id = new_build(data)
|
||||
data['id'] = build_id
|
||||
new_image_build(data)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue