hydra-evaluator: Always pick the jobset that hasn't been evaluated longest

This commit is contained in:
Eelco Dolstra 2013-02-25 18:47:54 +01:00
parent c30cee55dd
commit 24de044c55

View File

@ -20,6 +20,10 @@ STDOUT->autoflush();
my $db = Hydra::Model::DB->new(); my $db = Hydra::Model::DB->new();
my $config = getHydraConfig(); my $config = getHydraConfig();
# Don't check a jobset more than once every five minutes.
my $minCheckInterval = 1;
sub fetchInputs { sub fetchInputs {
my ($project, $jobset, $inputInfo) = @_; my ($project, $jobset, $inputInfo) = @_;
@ -97,8 +101,9 @@ sub permute {
} }
sub checkJobset { sub checkJobsetWrapped {
my ($project, $jobset) = @_; my ($jobset) = @_;
my $project = $jobset->project;
my $inputInfo = {}; my $inputInfo = {};
my $exprType = $jobset->nixexprpath =~ /.scm$/ ? "guile" : "nix"; my $exprType = $jobset->nixexprpath =~ /.scm$/ ? "guile" : "nix";
@ -219,13 +224,14 @@ sub checkJobset {
} }
sub checkJobsetWrapped { sub checkJobset {
my ($project, $jobset) = @_; my ($jobset) = @_;
print STDERR "considering jobset ", $project->name, ":", $jobset->name, "\n"; print STDERR "considering jobset ", $jobset->project->name, ":", $jobset->name,
" (last checked ", time() - $jobset->lastcheckedtime, "s ago)\n";
eval { eval {
checkJobset($project, $jobset); checkJobsetWrapped($jobset);
}; };
if ($@) { if ($@) {
@ -239,12 +245,17 @@ sub checkJobsetWrapped {
} }
sub checkProjects { # Check the jobset that hasn't been checked for the longest time.
foreach my $project ($db->resultset('Projects')->search({enabled => 1})) { sub checkSomeJobset {
print STDERR "considering project ", $project->name, "\n"; my ($jobset) = $db->resultset('Jobsets')->search(
checkJobsetWrapped($project, $_) { 'project.enabled' => 1, 'me.enabled' => 1, 'lastcheckedtime' => { '<', time() - $minCheckInterval } },
foreach $project->jobsets->search({enabled => 1}); { join => 'project', order_by => [ 'lastcheckedtime' ], rows => 1 });
}
return 0 unless defined $jobset;
checkJobset($jobset);
return 1;
} }
@ -253,16 +264,21 @@ if (scalar @ARGV == 2) {
my $projectName = $ARGV[0]; my $projectName = $ARGV[0];
my $jobsetName = $ARGV[1]; my $jobsetName = $ARGV[1];
my $jobset = $db->resultset('Jobsets')->find($projectName, $jobsetName) or die; my $jobset = $db->resultset('Jobsets')->find($projectName, $jobsetName) or die;
checkJobsetWrapped($jobset->project, $jobset); checkJobset($jobset);
exit 0; exit 0;
} }
while (1) { while (1) {
eval { eval {
checkProjects; if (checkSomeJobset) {
}; # Just so we don't go completely crazy if lastcheckedtime
if ($@) { print STDERR "$@"; } # isn't updated properly.
sleep 1;
} else {
print STDERR "sleeping...\n"; print STDERR "sleeping...\n";
sleep 30; sleep 30;
} }
};
if ($@) { print STDERR "$@"; }
}