Fix the jobset unchanged check

When checking whether the jobset is unchanged, we need to compare with
the previous JobsetEval regardless of whether it had new builds.
Otherwise we'll keep adding new JobsetEval rows.
This commit is contained in:
Eelco Dolstra 2012-03-12 20:28:44 +01:00
parent 27619f18e2
commit 87e4d43848
2 changed files with 13 additions and 6 deletions

View file

@ -788,11 +788,14 @@ sub addBuildProducts {
}
# Return the most recent evaluation of the given jobset that had new
# builds, or undefined if no such evaluation exists.
# Return the most recent evaluation of the given jobset (that
# optionally had new builds), or undefined if no such evaluation
# exists.
sub getPrevJobsetEval {
my ($db, $jobset) = @_;
my ($prevEval) = $jobset->jobsetevals({ hasnewbuilds => 1 }, { order_by => "id DESC", rows => 1 });
my ($db, $jobset, $hasNewBuilds) = @_;
my ($prevEval) = $jobset->jobsetevals(
($hasNewBuilds ? { hasnewbuilds => 1 } : { }),
{ order_by => "id DESC", rows => 1 });
return $prevEval;
}

View file

@ -110,8 +110,7 @@ sub checkJobset {
# inputs. If so, bail out.
my @args = ($jobset->nixexprinput, $jobset->nixexprpath, inputsToArgs($inputInfo));
my $argsHash = sha256_hex("@args");
my $prevEval = getPrevJobsetEval($db, $jobset);
if ($prevEval->hash eq $argsHash) {
if (getPrevJobsetEval($db, $jobset, 0)->hash eq $argsHash) {
print STDERR " jobset is unchanged, skipping\n";
txn_do($db, sub {
$jobset->update({lastcheckedtime => time});
@ -126,6 +125,8 @@ sub checkJobset {
txn_do($db, sub {
my $prevEval = getPrevJobsetEval($db, $jobset, 1);
# Clear the "current" flag on all builds. Since we're in a
# transaction this will only become visible after the new
# current builds have been added.
@ -166,6 +167,9 @@ sub checkJobset {
while (my ($id, $new) = each %buildIds) {
$ev->jobsetevalmembers->create({ build => $id, isnew => $new });
}
print STDERR " created new eval ", $ev->id, "\n";
} else {
print STDERR " created cached eval ", $ev->id, "\n";
}
});