forked from lix-project/hydra
hydra-queue-runner: Start as many builds as possible on each iteration
Because we don't start a build if a dependency is already building, it's possible that some or all of the $extraAllowed highest-priority builds in the queue are not eligible. E.g. with $extraAllowed = 32, we might start only 3 builds even though there are thousands in the queue. The fix is to try all queued builds until $extraAllowed have been started. Issue #99.
This commit is contained in:
parent
2974fea1a7
commit
8e36343b62
|
@ -100,15 +100,9 @@ sub checkBuilds {
|
||||||
# Select the highest-priority builds to start.
|
# Select the highest-priority builds to start.
|
||||||
my @builds = $extraAllowed == 0 ? () : $db->resultset('Builds')->search(
|
my @builds = $extraAllowed == 0 ? () : $db->resultset('Builds')->search(
|
||||||
{ finished => 0, busy => 0, system => $system->system, enabled => 1 },
|
{ finished => 0, busy => 0, system => $system->system, enabled => 1 },
|
||||||
{ join => ['project'], order_by => ["priority DESC", "id"],
|
{ join => ['project'], order_by => ["priority DESC", "id"] });
|
||||||
rows => $extraAllowed });
|
|
||||||
|
|
||||||
if (scalar(@builds) > 0) {
|
|
||||||
print "system type `", $system->system,
|
|
||||||
"': $nrActive active, $max allowed, ",
|
|
||||||
"starting ", scalar(@builds), " builds\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
my $started = 0;
|
||||||
foreach my $build (@builds) {
|
foreach my $build (@builds) {
|
||||||
# Find a dependency of $build that has no queued
|
# Find a dependency of $build that has no queued
|
||||||
# dependencies itself. This isn't strictly necessary,
|
# dependencies itself. This isn't strictly necessary,
|
||||||
|
@ -130,6 +124,13 @@ sub checkBuilds {
|
||||||
, starttime => time()
|
, starttime => time()
|
||||||
});
|
});
|
||||||
push @buildsStarted, $build;
|
push @buildsStarted, $build;
|
||||||
|
|
||||||
|
last if ++$started >= $extraAllowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($started > 0) {
|
||||||
|
print STDERR "system type `", $system->system,
|
||||||
|
"': $nrActive active, $max allowed, started $started builds\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue