From 87e4d43848fd5d7c89659e02232a1d7519ea77b1 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 12 Mar 2012 20:28:44 +0100 Subject: [PATCH] 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. --- src/lib/Hydra/Helper/AddBuilds.pm | 11 +++++++---- src/script/hydra-evaluator | 8 ++++++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/lib/Hydra/Helper/AddBuilds.pm b/src/lib/Hydra/Helper/AddBuilds.pm index 5749a73a..3eff4f75 100644 --- a/src/lib/Hydra/Helper/AddBuilds.pm +++ b/src/lib/Hydra/Helper/AddBuilds.pm @@ -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; } diff --git a/src/script/hydra-evaluator b/src/script/hydra-evaluator index 7f76f02a..f41e98fa 100755 --- a/src/script/hydra-evaluator +++ b/src/script/hydra-evaluator @@ -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"; } });