@@ -244,6 +244,12 @@ def prioritizeBuilders(master, builders):
@defer.inlineCallbacks
def transform(bldr):
+ # Sort primarily highest priority of build requests
+ priority = yield bldr.get_highest_priority()
+ if priority is None:
+ # for builders that do not have pending buildrequest, we just use large number
+ priority = -math.inf
+ # Break ties using the time of oldest build request (with bonus)
time = yield bldr.getOldestRequestTime()
#log.msg("Considering %s" % bldr.name)
if time is None:
@@ -254,7 +260,7 @@ def prioritizeBuilders(master, builders):
time = time - builder_bonuses[bldr.name]
#log.msg("Adding %s so %s" % (str(builder_bonuses[bldr.name]), str(time)))
- return (time, bldr)
+ return (-priority, time, bldr)
transformed = yield defer.gatherResults(
[transform(bldr) for bldr in builders])
@@ -262,13 +268,13 @@ def prioritizeBuilders(master, builders):
# sort the transformed list synchronously, comparing None to the end of
# the list
def transformedKey(a):
- (date, builder) = a
- return (date, builder.name)
+ (priority, date, builder) = a
+ return (priority, date, builder.name)
transformed.sort(key=transformedKey)
# and reverse the transform
- rv = [xf[1] for xf in transformed]
+ rv = [xf[2] for xf in transformed]
#log.msg("Using %s" % str(rv))
return rv