update the buildArch task weight based on the average duration of a build of the package

This commit is contained in:
Mike Bonnet 2009-02-10 21:18:44 -05:00
parent c48620edc8
commit f100121dda
2 changed files with 23 additions and 5 deletions

View file

@ -1917,10 +1917,23 @@ class BuildArchTask(BaseTaskHandler):
Methods = ['buildArch']
def weight(self):
# XXX - this one needs to figure the weight from the package to be
# built
return 1.5
def updateWeight(self, name):
"""
Update the weight of this task based on the package we're building.
weight is scaled from a minimum of 1.5 to a maximum of 6, based on
the average duration of a build of this package.
"""
avg = session.getAverageBuildDuration(name)
if not avg:
return
# increase the task weight by 0.75 for every hour of build duration
adj = (avg / 4800.0)
# cap the adjustment at +4.5
weight = self.weight() + min(4.5, adj)
session.host.setTaskWeight(self.id, weight)
def srpm_sanity_checks(self, filename):
header = koji.get_rpm_header(filename)
@ -1962,6 +1975,8 @@ class BuildArchTask(BaseTaskHandler):
# if not h[rpm.RPMTAG_DISTRIBUTION]:
# raise koji.BuildError, "the distribution tag is not set in the original srpm"
self.updateWeight(name)
rootopts = {
'repo_id': repo_id
}

View file

@ -5366,11 +5366,14 @@ class RootExports(object):
tag = get_tag_id(tag,strict=True)
return readTaggedRPMS(tag, package=package, arch=arch, event=event,inherit=True,latest=True, rpmsigs=rpmsigs)
def getAverageBuildDuration(self, packageID):
"""Get the average duration of a build of a package with
the given ID. Returns a floating-point value indicating the
def getAverageBuildDuration(self, package):
"""Get the average duration of a build of the given package.
Returns a floating-point value indicating the
average number of seconds the package took to build. If the package
has never been built, return None."""
packageID = get_package_id(package)
if not packageID:
return None
st_complete = koji.BUILD_STATES['COMPLETE']
query = """SELECT EXTRACT(epoch FROM avg(build.completion_time - events.time))
FROM build